我正在编写一个程序,使用fgets()扫描一个3个字符长度的字符串作为起飞和到达机场的代码。当我在方法外部编写语句(在主函数中)时,它能正常工作,但在方法内部则无法等待输入并留下变量为空。
void newFlight ()
{
printf("\n");
printf("============= CREATE A NEW FLIGHT ============= \n");
printf("Type 0 at any point to exit to main menu. \n");
printf("\n");
printf("EnterFlight ID (0 to cancel) : ");
scanf("%d", &flyList[curFly].flightID);
char codeA [4];
printf ("Enter Destination (Airport Code): ");
fgets(codeA, 3, stdin);
strcpy(codeA, flyList[curFly].arrive);
printf("%s %s \n", codeA, flyList[curFly].arrive); //TEST
printf("Enter Place Of Departure: ");
char codeD[4];
scanf("%s", codeD);
strcpy(codeD, flyList[curFly].depart);
printf("%s %s \n", codeD, flyList[curFly].depart); //TEST
printf("Enter Date Of Departure (DD MM YYYY): ");
scanf("%hd %hd %hd", &flyList[curFly].timeOfDep.day, &flyList[curFly].timeOfDep.month, &flyList[curFly].timeOfDep.year);
printf("Enter Time Of Departure (HH MM)in 24Hr Format: ");
scanf("%hd %hd", &flyList[curFly].timeOfDep.hour, &flyList[curFly].timeOfDep.minute);
curFly++;
}
strcpy(codeA, flyList[curFly].depart);
进行重写。 - BLUEPIXY%d
会将换行符留在输入缓冲区中,供下一次输入操作使用;而这个输入操作是fgets()
,它会查找直到下一个换行符的内容。输入的第一个字符是换行符;这也是fgets()
只读取该字符的原因。这是一个标准问题,@Barmar 确认了其中一个可能的重复问题。 - Jonathan Lefflerfgets()
是否正常工作。 您必须检查每个输入操作以确保它正确工作。 如果您不这样做,那么您将面临灾难。 - Jonathan Leffler