c - 如何解决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);
}
}
解决方案
发生“ expected identifier before '(' token
”错误是因为您使用->
运算符来访问 a 的字段struct
,而不是传递字段标识符,而是传递一个'('
字符。
这是错误列表。
av->(A.code)
语法不好。如果av
是指向 a 的指针,struct
其中包含一个struct
名为的字段A
,并且您要访问 的字段code
,请A
使用av->A.code
;(*p) = p->(svt)
也是不好的语法。如果你想p
指向列表的下一个元素,我假设它是由字段指向的svt
,使用p = p->svt
;scanf()
使用标识符时忘记传递整数的地址, 在变量名之前"%d"
插入字符;'&'
- 替换
typedef struct element *list
为typedef struct element list
; - 请注意,该函数将在其
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;
}
推荐阅读
- java - 增加 PermGen 空间(Tomcat7、Windows 服务)
- jenkins - Terraform 无法将模块作为 jenkins 管道的一部分提取
- c# - 初级 RPG 高效 ASCII 地图和移动系统
- python-3.x - 使用 Communicate() 后,使用 Subprocess.Popen 打开 SSH 隧道不会进入后台
- c++ - 如何使用 xcode 文件模板添加文件夹引用(文件夹组)?
- microsoft-graph-api - 当我减少 receivedDate 范围时,搜索消息会返回更多结果
- android - 无法解析“:app@debug/compileClasspath”的依赖关系:无法解析com.android.support:gridlayout-v7:26.1.0
- android - Android 地图:我的位置按钮在活动首次启动时不起作用
- ruby-on-rails - 使用不同的 ENV 变量为同一个 Rails 应用程序提供服务
- node.js - 借助 Cron 作业触发函数并删除数据