我遇到了标准输入流中的 Enter 键或字符弄乱以下输入调用的问题。
假设我有一个输入调用,所以我输入了内容。
但随后将 Enter 键作为下一个输入调用的输入。
我认为在c++中有cin.ignore()
来做到这一点。
我就是找不到C版本。
输入法有getchar()
and 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 忽略可以用 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)