gpt4 book ai didi

使用 Getchar 时清除缓冲区(必须有更好的方法!)

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:35 30 4
gpt4 key购买 nike

我正在编写一个只需要获取一个数字的函数,我决定使用 getchar() 而不是 scanf()。

但是因为我只需要一个字符,所以我没有使用数组来获取它。这会导致问题,因为我没有循环来查找“/n”字符。为了确保在再次使用 getchar() 之前清除我的缓冲区,我写了这个:

while (getchar() != '\n'){}

它按我的需要工作,但这是解决这个问题的“正确”方法吗?

我试过使用fflush(stdin),但似乎没有任何效果。

谢谢大家的回复,我经常查看评论,很乐意回答问题。

最佳答案

请注意,根据 C 标准,fflush(stdin) 是未定义的行为,尽管有一些实现支持它。

执行此操作的惯用方法是:

int c;
while ((c = getchar()) != '\n' && c != EOF) {
continue;
}

需要检查 EOF 以避免在 getchar() 中出现错误或用户发出 EOF 信号时出现无限循环 从键盘。变量 c 需要是 int 以确保它可以保存 EOF 的值,通常为 -1。

另请注意,此方法要求输入流中至少还剩一个字符,否则getchar()会阻塞,等待输入。之前对 getchar()scanf() 的调用将至少留下一个换行符,但对 fgets() 的调用可能不会。

关于使用 Getchar 时清除缓冲区(必须有更好的方法!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954160/

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