3

在输入调用之后,stdin 流中的 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();
    }

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

4

1 回答 1

4

您只需要继续调用getchar即可从流中消耗您不想要的字符。如果您知道总是有一个附加字符,那么只需额外调用getchar.

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

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

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

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

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

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);
} 
于 2013-02-04T06:30:07.517 回答