【发布时间】:2021-01-06 17:07:05
【问题描述】:
我试图让用户通过按 ENTER 键确认他的操作 - 如果按下任何其他键,则不会发生上述“操作”。
但是,我实际上想要清除 stdin 而不是简单的 if((ch=getchar())=='\n') {...} ,以防用户输入类似 hello\n 的内容,而不是让我下次在程序中输入时读取它。
我用来清除stdin的函数是:
void eat()
{
int eat; while ((eat = getchar()) != '\n' && eat != EOF);
}
但是,这种策略让用户不得不按 ENTER 两次 ,因为它' eats '换行符应该使它将输入发送到我的程序(在终端中)。
什么是最简单、最优雅的解决方案?
注意:我不能使用非便携式解决方案,例如使用 POSIX terminos.h 将控制台设置为立即发送每个字符。
【问题讨论】:
-
换句话说:你想读一行。如果它是空的,那是一个确认,如果不是,不是。所以...
fgets? -
@dratenik 听起来 brilliant - 愿意发布答案吗?
-
好吧,那好吧。
标签: c io console-application stdin flush