c - 我可以使用 getchar() 来清除 scanf 和 fgets 之间的缓冲区吗?
问题描述
我有这个功能,它运行良好,但我想知道 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
您需要多次重用此代码一样。
推荐阅读
- database - 在 Windows 10 上安装 Informatica Server 9.6 时出现数据库连接错误
- c# - 在 Azure App Service for ASP NET App 中,我可以使用什么作为静态引用来指示是在生产环境中还是在开发环境中?
- google-drive-api - How do I transfer subscription of Google Drive to an existing google account?
- c# - C# DateTime.ToString 在 dotnet 框架中带有 zzz 中断,但在 dotnet 核心中没有
- botframework - 操作返回了无效的状态代码“Gone”
- postgresql - 如何提高 PostgreSQL LIKE %text% 查询性能
- arrays - 我正在编写代码以找出总数之间的差异。二进制数中的 1 和 0,使用数组
- python - ConnectionError: ('连接中止。', BadStatusLine('')
- power-automate - Power Automate 中的 Office 脚本 - 共享脚本但不通过工作簿
- javascript - 如何将 SerializeObject 解析为 Json 数组对象 jQuery