首页 > 解决方案 > 如何解决C中的错误('('令牌之前的预期标识符)

问题描述

这是我的第一个问题。在下面的代码中。它在scanf行中不断给我以下错误:'('令牌之前的预期标识符。我不知道如何解决它..

typedef struct avion
{
    int code;
    int capacite;
    char etat[1];
    int date;
    int nvols;
} avion;
typedef struct element *list;
typedef struct element
{
    avion A;
    struct element *svt;
} element;
        
list *Modifier(list* av)   
    {
        list *p=av;
        int c;
        printf("\n------------La Modification--------------\n");
        printf("\nDonner le code de l'avion que vous voulez modifier... :");
        scanf("%d",&c);
        while(av!=NULL) 
        {
            if ((av->(A.code)) == c)
            {   
            printf("\nL'avion existe dans la liste...");
            printf("\nDonner le nouveau code:");
            scanf("%d",&av->(A.code));
            printf("\nDonner la nouvelle capacite...:");
            scanf("%d",av->(A.capacite));
            printf("\nDonner le nouveau etat...:");
            scanf("%s",av->(A.etat));
            printf("\nDonner la nouvelle date de fabrication...:");
            scanf("%d",av->(A.date));
            printf("\nDonner le nouveau nombre de vols assures...:");
            scanf("%d",(av->(A.nvols)));
            return p;
            }
            (*p)=p ->(svt);
        }
     }

标签: c

解决方案


发生“ expected identifier before '(' token”错误是因为您使用->运算符来访问 a 的字段struct,而不是传递字段标识符,而是传递一个'('字符。

这是错误列表。

  1. av->(A.code)语法不好。如果av是指向 a 的指针,struct 其中包含一个struct名为的字段A,并且您要访问 的字段code,请A使用av->A.code;
  2. (*p) = p->(svt)也是不好的语法。如果你想p指向列表的下一个元素,我假设它是由字段指向的svt,使用p = p->svt;
  3. scanf()使用标识符时忘记传递整数的地址, 在变量名之前"%d"插入字符;'&'
  4. 替换typedef struct element *listtypedef struct element list;
  5. 请注意,该函数将在其 code字段等于的第一个元素之后返回c。如果您打算这样做,则需要list *在 while 循环之后返回 a 。我建议您返回NULL以表明列表中没有元素被修改。

这是我的建议。

#include <stdlib.h>
#include <stdio.h>

typedef struct avion {
    int code;
    int capacite;
    char etat[1];
    int date;
    int nvols;
} avion;

typedef struct element {
    avion A;
    struct element *svt;
} element;

typedef struct element list;

list *modifier(list* av) {
    list *p=av;
    int c;
    printf("\n------------La Modification--------------\n");
    printf("\nDonner le code de l'avion que vous voulez modifier...: ");
    scanf("%d", &c);
    while (av!=NULL) {
        if (av->A.code == c) {   
            printf("\nL'avion existe dans la liste...");
            printf("\nDonner le nouveau code: ");
            scanf("%d", &av->A.code);
            printf("\nDonner la nouvelle capacite...: ");
            scanf("%d", &av->A.capacite);
            printf("\nDonner le nouveau etat...: ");
            scanf("%s", av->A.etat);
            printf("\nDonner la nouvelle date de fabrication...: ");
            scanf("%d", &av->A.date);
            printf("\nDonner le nouveau nombre de vols assures...: ");
            scanf("%d", &av->A.nvols);
            return p;
        }
        p = p->svt;
    }
    return NULL;
 }

推荐阅读