如何在没有 -> 的情况下在 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));