【问题标题】:Clearing stdin after 'Press ENTER to continue'?在“按 ENTER 继续”后清除标准输入?
【发布时间】: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


【解决方案1】:

听起来你想读取一行然后检查它是否为空?看起来像是 fgets(..., stdin) 的工作

char mystring [100];
fgets (mystring , 100 , stdin);
if (*mystring == '\n') {//confirmed}

【讨论】:

  • 等等...我真的不能再打电话给eat()了将标记 EOL ,导致用户必须按两次 ENTER ...
猜你喜欢
  • 1970-01-01
  • 2014-10-20
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多