我有这个函数并且它工作得很好,但是我想知道使用 getchar 是否正确。我可以做些其他的事情来代替吗?谢谢,大家。
void addRecord (struct record ** start, int account, char name[], char address[ ]);
{
printf("Enter your account number:\n");
scanf("%d", &account);
getchar();
printf("Enter your name:\n");
fgets(name, sizeof name, stdin);
printf("Enter your residential address:\n");
getaddress(address, sizeof address);
}
int c = getchar(); while (c != '\n' && c != EOF) c = getchar();
或者将其放在for (int c = getchar(); c != '\n' && c != EOF; c = getchar();) {}
循环中。这样可以同时保存并检查返回结果是否为'\n'
和EOF
。需要注意的是c
必须是int
而不是char
。你可以将该逻辑放入一个void empty_stdin() {...}
函数中,然后在需要时调用empty_stdin();
。 - David C. Rankinaccount
,那么单次调用getchar()
将无法清空stdin
。 - David C. Rankinchar buf[1024]; printf("输入您的账号:\n"); if (fgets (buf, sizeof buf, stdin) == NULL) { fputs ("(用户取消输入)\n", stdout); return; } if (sscanf (buf, "%d", &account) != 1) { fputs ("错误:无效的整数输入。\n", stderr); return; }
现在您可以完全确信account
包含有效值,并且stdin
中不会有任何剩余...:)
您还应该验证fgets()
的返回值,以确保用户不会使用 Ctrl+d(或 Windows 上的 Ctrl+z)手动生成EOF
。 - David C. Rankin