【问题标题】:C code for ignoring the enter key after input输入后忽略回车键的C代码
【发布时间】:2013-01-18 19:33:30
【问题描述】:

我在输入调用后遇到了标准输入流中的 Enter 键或字符的问题。

假设我有一个输入调用,所以我输入了内容。 但随后将 Enter 键作为下一次输入调用的输入。

我认为在 c++ 中有 cin.ignore() 可以解决问题。

我只是找不到 C 版本。

输入法为getchar()gets()

对不起,如果这是重复的。我找不到与我匹配的问题。 感谢您的帮助!

        printf("Do you want to view the lines? ");
    int choice = getchar();
    while (choice == 'y')
    {
            char line[80];
            printf("What line do you want to see? ");
            gets(line);
            if (line != "all")
            {
                    n = atoi(line);
                    printf("Line %d: %s\n",n,list[n]);
            }
            else
                    for (int i = 0; i<size; i++)
                            printf("%s \n",list[i]);
            printf("Any more lines? ");
            choice = getchar();
    }

我承认这是非常基础的,但仍在学习中。

【问题讨论】:

  • 您能否编写一个简短的示例程序来演示该问题,并将其添加到您的问题中?
  • 我已经编辑了 steveha
  • Alok Save,你不应该不阅读就标记人们的问题。我在代码中的任何地方都没有 scanf 函数。

标签: c user-input stdin enter


【解决方案1】:

您只需继续调用getchar 即可从流中使用您不想要的字符。如果您知道总是有一个额外的字符,那么只需额外调用一次getchar 就可以了。

如果您想从流中删除多个字符或处理输入可能实际上包含您真正需要的内容的情况,您可以执行类似以下代码的操作,而不是 choice = getchar()

do
{
  choice = getchar();
} while(choice=='\n'); // Add any other characters you may want to skip

这将继续删除字符(在这种情况下仅当它们是换行符时),但将选项设置为第一个未删除的字符。

顺便说一句,你不能使用 C 字符串比较函数来比较这样的字符串 (!= "all"),例如strcmp().

更一般地,C++ istream 忽略可以大致用 C 编写,如下面的代码;使用stdin 调用以跳过标准输入中的字符:

int ignore(FILE *stream, int n, int delim)
{
  int c;
  while(n>0)
  {
    c = getc(stream);
    if(c==EOF || c==delim)
    {
      return c;
    }
    n--;
  }
  return(c);
} 

【讨论】:

  • delim 变量是干什么用的?
  • @Alex:这与您提到的 C++ ignore 函数(cplusplus.com/reference/istream/istream/ignore)中的相同。 ignore 默认跳过 1 个字符,delim 为 EOF。如果你得到你不想要的东西,所有这一切的 tl;dr 都是继续调用 getchar() 。如果您只是调用 getchar(),您将从输入流中提取一个字符。
  • @Alex:我在我希望适合初学者的水平上添加了更多解释。如果您有不清楚的地方,请告诉我。
猜你喜欢
  • 2017-06-03
  • 2014-07-10
  • 2011-04-24
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多