【发布时间】:2015-03-04 20:16:46
【问题描述】:
有人可以帮我处理这段代码吗?当我尝试此代码时,它根本不起作用。我在使用 C 语言处理文件方面的经验非常少。请帮我解决这个问题
这是结构
struct passenger
{
char airline[20];
char name[20];
int age;
char gender;
char clas[10];
int seatNo;
}e;
这里是插入记录的函数
oid reserve()
{
int airline, clas;
printf("\nSelect your flight:");
printf("\n1. PIA\n2. Shaheen\n3. Air Blue\n\nEnter Choice:");
scanf("%d", &airline);
if (airline == 1)
strcpy(e.airline, "\nPIA");
else if (airline == 2)
strcpy(e.airline, "\nShaheen");
else if (airline == 3)
strcpy(e.airline, "\nAirBlue");
printf("\nEnter Name:");
scanf("%s", &e.name);
printf("\nEnter Age:");
scanf("%d", &e.age);
printf("\nEnter Your Gender (M/F): ");
e.gender = getche();
printf("\n\nPress 1 for ECONOMY CLASS and 2 for BUSSINESS CLASS: ");
scanf("%d", &clas);
if (clas == 1)
strcpy(e.clas, "Economy");
else
strcpy(e.clas, "Bussiness");
e.seatNo = rand() % 500;
printf("\nYour seat num is: %d\n\n", e.seatNo);
if (airline==1)
save = fopen("PIA.DAT", "a");
else if (airline==2)
save = fopen("Shaheen.DAT", "a");
else
save = fopen("AirBlue.DAT", "a");
fwrite(&e, sizeof( struct passenger), 1, save);
fclose(save);
getch();
}
这是为了更新记录
void update()
int i = 1, count = 0, clas, record = 0;
int seat, airline;
struct passenger se;
printf("\n\n\nSelect your flight:");
printf("\n1. PIA\n2. Shaheen\n3. Air Blue\n\nEnter Choice:");
scanf("%d", &airline);
if (airline == 1)
updateR = fopen("PIA.DAT", "r+");
else if (airline == 2)
updateR = fopen("Shaheen.DAT", "r+");
else
updateR = fopen("AirBlue.DAT", "r+");
if (updateR == NULL)
{
printf("File not found.");
}
else
{
printf("\nEnter Your Seat No: ");
scanf("%d", &seat);
while (!feof(updateR))
{
fread(&se, sizeof(struct passenger), 1, updateR);
if (se.seatNo == seat)
{
printf("\nEnter Name:");
scanf("%s", &e.name);
printf("\nEnter Age:");
scanf("%d", &e.age);
printf("\nEnter Your Gender (M/F): ");
e.gender = getche();
printf("\n\nPress 1 for ECONOMY CLASS and 2 for BUSSINESS CLASS: ");
scanf("%d", &clas);
if (clas == 1)
strcpy(e.clas, "Economy");
else
strcpy(e.clas, "Bussiness");
fseek(updateR,sizeof(struct passenger)* record, SEEK_END);
fwrite(&e, sizeof(&e), 1, updateR);
break;
}
}
fclose(updateR);
}
getch();
}
【问题讨论】:
-
请提供更多信息。代码应该做什么?你期望什么输出?你实际上得到了什么输出(如果有的话)?这种上下文可以帮助读者帮助你。
-
我不确定这两行 fread(&se, sizeof(struct Passenger), 1, updateR); if (se.seatNo == seat) 看起来您假设您的 fread 会自动将行信息放入结构的正确字段 (se.seatNo)。我会先调查一下,以检查它是否正常工作。
-
@AmmarBukhari:您应该edit您的问题以改进它,而不是在评论部分提供其他信息。
-
sizeof(&e)->sizeof(struct e)假设您正在尝试获取结构的大小 -
我很好奇你为什么将这个变量称为
clas而不是class。是不是您正在使用 C++ 编译器编译您的 C 代码(它将class视为关键字)?如果你愿意,你可以这样做,但如果你用 C 编程,你真的应该使用 C 编译器。