gpt4 book ai didi

我可以使用 getchar() 清除 scanf 和 fgets 之间的缓冲区吗?

转载 作者:行者123 更新时间:2023-12-03 23:03:23 26 4
gpt4 key购买 nike

我有这个功能,它运行良好,但我想知道 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);

}

最佳答案

getchar()只会从 stdin 获取单个字符.清除 stdin缓冲区,您已使用 getchar()直到获得 EOF(文件结尾)或换行。所以,不要调用 getchar()一次,将其称为这样的循环:

int c;
do {
c = getchar();
} while (c != EOF && c != '\n');
注意 EOF的值是 -1,所以你必须使用 int处理它,如 char限制在 0 到 255 范围内。
感谢 David Ranieri,EOF 的值可以(并且通常)超出 char 支持的范围。 ,所以你应该使用 int (或 short )来处理 EOF。
您可以将此代码放在类似 clear_stdin 的函数中。如果您需要多次重复使用此代码。

关于我可以使用 getchar() 清除 scanf 和 fgets 之间的缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64150136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com