我遇到输入调用后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();
}
我承认这是非常基本的,但仍在学习。
答案 0 :(得分: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 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);
}