输入后忽略输入键的C代码

我输入调用后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(); } 

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

您只需要继续调用getchar来消耗流中不需要的字符。 如果你知道总有一个额外的字符,那就像对getchar进行一次额外的调用一样简单。

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

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

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

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

更一般地说,C ++ istream ignore可以粗略地用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); }