main.c:14:10: error: expected ': ', ', ', '; ', '} '或' __att

  • 本文关键字:att expected error main c
  • 更新时间 :
  • 英文 :


为什么我得到这个错误?我对C很陌生,只是想知道发生了什么。c:14:10: error: expected ': ', ', ', '; ', '} '或'属性' before ' = ' token '。试图修复错误,但无济于事。当我在int代码后删除'-1'时,它会编译,但不是我想要它编译的。再次感谢。

#include<stdio.h>
#include<stdlib.h>
struct event {
int code = -1;
char name[50];
int count;
char gender;
} event[100];
int check(int code, int eventnum)
{
int i = 0;
if (code < 0 || code > 99)
{
printf("Invalid code entered.n");
return 0;
}
while (i <= eventnum)
{
if (event[i].code == code)
{
printf("Event with code %d already existn", code);
return 0;
}
i++;
}
}
int checkcount(int count)
{
if (count < 10 || count > 99)
{
printf("Invalid number of playern");
return 0;
}
}
int checkgender(char gender)
{
if (gender != 'M' && gender == 'F' && gender == 'X')
{
printf("Invalid gendern");
return 0;
}
}
int main()
{
int eventnum = -1;
char choice;
int code, count, i, flag;
char gender;
while (1)
{
fflush(stdin);
printf("Enter operation code:");
scanf("%c", &choice);
switch (choice)
{
case 'i':
if (eventnum == 99)
{
printf("Input limit reachedn");
break;
}
printf("Enter the event code:");
scanf("%d", &code);
if (!check(code, eventnum + 1))
break;
printf("Enter event name:");
fflush(stdin);
fgets(event[eventnum + 1].name, 49, stdin);
fflush(stdin);
printf("Enter number of competiters:");
scanf("%d", &count);
if (!checkcount(count))
break;
fflush(stdin);
printf("Enter the gender:");
scanf("%c", &gender);
if (!checkgender(gender))
break;
fflush(stdin);
eventnum++;
event[eventnum].code = code;
event[eventnum].count = count;
event[eventnum].gender = gender;
break;
case 's':
i = 0;
flag = 0;
printf("Enter event code:");
scanf("%d", &code);
while (event[i].code != code)
{
i++;
}
if (event[i].code == code)
flag++;
if (flag == 0)
{
printf("Event with code %d not found.n", code);
}
printf("CODEtEVENT NAMEtCOMPETITORStGENDERn");
printf("%dtt%stt%dtt%cn", event[i].code,
event[i].name, event[i].count, event[i].gender);
break;
case 'u':
i = 0;
flag = 0;
printf("Enter event code:");
scanf("%d", &code);
while (event[i].code != code)
{
i++;
}
if (event[i].code == code)
flag++;
if (flag == 0)
{
printf("Event with code %d not found.n", code);
}
printf("Enter event name:");
fflush(stdin);
fgets(event[eventnum + 1].name, 49, stdin);
fflush(stdin);
printf("Enter Number of competitors:");
scanf("%d", &count);
if (!checkcount(count))
break;
fflush(stdin);
printf("Enter gender:");
scanf("%c", &gender);
fflush(stdin);
if (!checkgender(gender))
break;
event[i].count = count;
event[i].gender = gender;
break;
case 'p':
i = 0;
printf("CODEtEVENT NAMEtttCOMPETITORStGENDERn");
while (i <= eventnum)
{
printf("%dt%-49st%dtt%cn",
event[i].code, event[i].name,
event[i].count, event[i].gender);
i++;
}
break;
case 'q':
exit(0);
default:
printf("Invalid input!n");
}
}
return 0;
}

关键问题是代码试图定义event结构体,但同时又以某种方式将其用作变量。C语言不是这样的。

代码需要首先定义结构是什么,然后声明一个变量,使使用

的定义。在结构定义中定义结构的值也是不合法的。这得晚点再做。这就是导致您看到的错误的原因:

# gcc -g -Wall yourcode.c -o yourcode.exe
yourcode.c:5:11: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
int code = -1;   

也许你想要这样的东西:

struct event
{
int  code;
char name[50];
int  count;
char gender;
};
// Global array of event structs
#define MAX_EVENTS 100
struct event all_events[MAX_EVENTS];
// Initialise global events to "empty"
void initialiseEvents()
{
for (int i=0; i<MAX_EVENTS; i++)
{
all_events[i].code    = -1;
all_events[i].name[0] = '';
all_events[i].count   = 0;
all_events[i].gender  = '-';
}
}

这里我创建了一个全局变量all_events,它是一个包含100个struct event的数组。这似乎是现有代码的意图(我猜)。我还添加了函数initialiseEvents()来循环all_events中的每个event,并按照原始代码设置值(也有一些猜测)。

然后代码的其余部分继续引用定义不清的"事件";就好像它是一个变量,而不是一个定义。这里需要使用类型引用变量。按照我上面的修改,现在应该是all_events

下面是应用了这些更改的代码。请把它和你现有的比较一下。它可以编译,但是我没有进一步调试它。

#include<stdio.h>
#include<stdlib.h>
struct event
{
int  code;
char name[50];
int  count;
char gender;
};
// Global array of event structs
#define MAX_EVENTS 100
struct event all_events[MAX_EVENTS];
int check(int code, int eventnum)
{
int i = 0;
if (code < 0 || code > 99)
{
printf("Invalid code entered.n");
return 0;
}
while (i <= eventnum)
{
if (all_events[i].code == code)
{
printf("Event with code %d already existn", code);
return 0;
}
i++;
}
return 1;
}
int checkcount(int count)
{
if (count < 10 || count > 99)
{
printf("Invalid number of playern");
return 0;
}
return 1;
}
int checkgender(char gender)
{
if (gender != 'M' && gender == 'F' && gender == 'X')
{
printf("Invalid gendern");
return 0;
}
return 1;
}
// Initialise global events to "empty"
void initialiseEvents()
{
for (int i=0; i<MAX_EVENTS; i++)
{
all_events[i].code    = -1;
all_events[i].name[0] = '';
all_events[i].count   = 0;
all_events[i].gender  = '-';
}
}

int main()
{
int eventnum = -1;
char choice;
int code, count, i, flag;
char gender;
initialiseEvents();
while (1)
{
fflush(stdin);
printf("Enter operation code:");
scanf("%c", &choice);
switch (choice)
{
case 'i':
if (eventnum == 99)
{
printf("Input limit reachedn");
break;
}
printf("Enter the event code:");
scanf("%d", &code);
if (!check(code, eventnum + 1))
break;
printf("Enter event name:");
fflush(stdin);
fgets(all_events[eventnum + 1].name, 49, stdin);
fflush(stdin);
printf("Enter number of competiters:");
scanf("%d", &count);
if (!checkcount(count))
break;
fflush(stdin);
printf("Enter the gender:");
scanf("%c", &gender);
if (!checkgender(gender))
break;
fflush(stdin);
eventnum++;
all_events[eventnum].code = code;
all_events[eventnum].count = count;
all_events[eventnum].gender = gender;
break;
case 's':
i = 0;
flag = 0;
printf("Enter event code:");
scanf("%d", &code);
while (all_events[i].code != code)
{
i++;
}
if (all_events[i].code == code)
flag++;
if (flag == 0)
{
printf("Event with code %d not found.n", code);
}
printf("CODEtEVENT NAMEtCOMPETITORStGENDERn");
printf("%dtt%stt%dtt%cn", all_events[i].code,
all_events[i].name, all_events[i].count, all_events[i].gender);
break;
case 'u':
i = 0;
flag = 0;
printf("Enter event code:");
scanf("%d", &code);
while (all_events[i].code != code)
{
i++;
}
if (all_events[i].code == code)
flag++;
if (flag == 0)
{
printf("Event with code %d not found.n", code);
}
printf("Enter event name:");
fflush(stdin);
fgets(all_events[eventnum + 1].name, 49, stdin);
fflush(stdin);
printf("Enter Number of competitors:");
scanf("%d", &count);
if (!checkcount(count))
break;
fflush(stdin);
printf("Enter gender:");
scanf("%c", &gender);
fflush(stdin);
if (!checkgender(gender))
break;
all_events[i].count = count;
all_events[i].gender = gender;
break;
case 'p':
i = 0;
printf("CODEtEVENT NAMEtttCOMPETITORStGENDERn");
while (i <= eventnum)
{
printf("%dt%-49st%dtt%cn",
all_events[i].code, all_events[i].name,
all_events[i].count, all_events[i].gender);
i++;
}
break;
case 'q':
exit(0);
default:
printf("Invalid input!n");
}
}
return 0;
}

相关内容

最新更新