如何在没有 -> 的情况下在 c 的嵌套结构中使用 scanf 设置值?
How can I set a value using scanf in a nested struct in c without ->?
我无法正确指定scanf中变量cociente的地址,我一直在尝试获取内存地址,我不能希望你能帮助我。
我正在使用 2 个结构,它们都是动态分配的。这些是可以阐明这一点的代码片段。
typedef struct termino
{
int exponente;
float cociente;
} termino;
typedef struct polinomio
{
//Se tiene un conjunto de términos de nombre polinomio
termino* polinomio;
int size;
} polinomio;
polinomio* polinomio_;
termino* terminos;
for (i = 0; i < size_; i++) {
printf("Ingrese el cociente %d:\n",i);
scanf("%f",&((*polinomio_).(polinomio+i).cociente));
//printf("\n%.2f",(*(polinomio_).*(polinomio+i).cociente);
}
我在使用 gcc 时遇到错误:
main.c:37:32: error: expected identifier before ‘(’ token
scanf("%f",&((*polinomio_).(polinomio+i).cociente));
^
如果要使用“+i”,请注意括号,不要使用“->
”:
scanf("%f",&( (* (((*polinomio_).polinomio)+i) ).cociente) );
和“->
”:
scanf("%f",&( ( (polinomio_->polinomio)+i )->cociente) );
但最好使用 table 索引,如评论中所建议的那样,但您询问时没有使用运算符 "->
":
scanf("%f",&( ((*polinomio_).polinomio)[i].cociente) );
语法是您最不用担心的,polinomio_
未初始化,因此 scanf
会将一些值放在内存中的某处,可能会导致崩溃
polinomio* polinomio_; <-- not initialized
for (i = 0; i < size_; i++) {
printf("Ingrese el cociente %d:\n",i);
scanf("%f",&((*polinomio_).(polinomio+i).cociente)); <-- deref
}
首先让 polinomio_ 指向分配的结构
polinomio_ = malloc(sizeof(struct polinomio));
在结构中你有另一个指针 (polinomio),你也需要分配给它指向的内容。
polinomio_.polinomio = malloc(sizeof(struct termino)* size_);
一旦你完成了,你就可以填充你的结构
scanf( "%f", &(polinomio_->polinomio[i].cociente) );
尝试使用英文变量名称和类型,至少当您 post 在 SO 此处时如此,但一般来说,如果您想在某处发布代码会更好。另一个技巧是将类型大写,这样可以更容易地看出什么是类型以及什么是 type/pointer.
的实例
例如
typedef struct termino
{
int exponente;
float cociente;
} Termino;
首先,在使用前初始化指针。
polinomio* polinomio_ = (polinomio*)malloc( sizeof(polinomio) );
termino* terminos = (termino*)malloc( sizeof(termino) * size );
其次,初始化polinomio_,
polinomio_->polinomio = terminos;
polinomio_->size - size;
终于用上了
scanf("%f",&(*(((*polinomio_).polinomio) + i ).cociente));
我不明白为什么不 ->
scanf("%f",&(polinomio_->polinomio[i]->cociente));
我无法正确指定scanf中变量cociente的地址,我一直在尝试获取内存地址,我不能希望你能帮助我。 我正在使用 2 个结构,它们都是动态分配的。这些是可以阐明这一点的代码片段。
typedef struct termino
{
int exponente;
float cociente;
} termino;
typedef struct polinomio
{
//Se tiene un conjunto de términos de nombre polinomio
termino* polinomio;
int size;
} polinomio;
polinomio* polinomio_;
termino* terminos;
for (i = 0; i < size_; i++) {
printf("Ingrese el cociente %d:\n",i);
scanf("%f",&((*polinomio_).(polinomio+i).cociente));
//printf("\n%.2f",(*(polinomio_).*(polinomio+i).cociente);
}
我在使用 gcc 时遇到错误:
main.c:37:32: error: expected identifier before ‘(’ token scanf("%f",&((*polinomio_).(polinomio+i).cociente)); ^
如果要使用“+i”,请注意括号,不要使用“->
”:
scanf("%f",&( (* (((*polinomio_).polinomio)+i) ).cociente) );
和“->
”:
scanf("%f",&( ( (polinomio_->polinomio)+i )->cociente) );
但最好使用 table 索引,如评论中所建议的那样,但您询问时没有使用运算符 "->
":
scanf("%f",&( ((*polinomio_).polinomio)[i].cociente) );
语法是您最不用担心的,polinomio_
未初始化,因此 scanf
会将一些值放在内存中的某处,可能会导致崩溃
polinomio* polinomio_; <-- not initialized
for (i = 0; i < size_; i++) {
printf("Ingrese el cociente %d:\n",i);
scanf("%f",&((*polinomio_).(polinomio+i).cociente)); <-- deref
}
首先让 polinomio_ 指向分配的结构
polinomio_ = malloc(sizeof(struct polinomio));
在结构中你有另一个指针 (polinomio),你也需要分配给它指向的内容。
polinomio_.polinomio = malloc(sizeof(struct termino)* size_);
一旦你完成了,你就可以填充你的结构
scanf( "%f", &(polinomio_->polinomio[i].cociente) );
尝试使用英文变量名称和类型,至少当您 post 在 SO 此处时如此,但一般来说,如果您想在某处发布代码会更好。另一个技巧是将类型大写,这样可以更容易地看出什么是类型以及什么是 type/pointer.
的实例例如
typedef struct termino
{
int exponente;
float cociente;
} Termino;
首先,在使用前初始化指针。
polinomio* polinomio_ = (polinomio*)malloc( sizeof(polinomio) );
termino* terminos = (termino*)malloc( sizeof(termino) * size );
其次,初始化polinomio_,
polinomio_->polinomio = terminos;
polinomio_->size - size;
终于用上了
scanf("%f",&(*(((*polinomio_).polinomio) + i ).cociente));
我不明白为什么不 ->
scanf("%f",&(polinomio_->polinomio[i]->cociente));