C 循环问题-重复指令两次而不是一次
在这里学习C,我很困惑C 循环问题-重复指令两次而不是一次,c,loops,for-loop,char,break,C,Loops,For Loop,Char,Break,在这里学习C,我很困惑 char ch; for(;;) { puts("Type a letter: "); ch=getchar(); if(ch == '~') { break; } } 为什么它要打印两次而不是一次“键入一封信”?运行时,程序的运行方式如下: 键入字母: a 键入字母: 键入字母: d 键入字母: 键入字母: g PS while循环也会发生同样的情况。按“a”,然后按“回车”键。因此,您的代码将“a”作为第一
char ch;
for(;;)
{
puts("Type a letter: ");
ch=getchar();
if(ch == '~')
{
break;
}
}
为什么它要打印两次而不是一次“键入一封信”?运行时,程序的运行方式如下:
键入字母:
a
键入字母:
键入字母:
d
键入字母:
键入字母:
g
PS while循环也会发生同样的情况。按“a”,然后按“回车”键。因此,您的代码将“a”作为第一个输入,将换行符作为第二个输入。所以它把这行打印了两次。 您可以尝试以下方法:
char ch;
for(;;)
{
puts("Type a letter: ");
ch=getchar();
getchar(); //newly added line. This line will discard the newline
if(ch == '~')
{
break;
}
}
因为换行符也是一个字符。调试器、断点和
ch
上的变量监视可以很快发现这一点。现在就开始学习;这将为你的职业生涯带来回报。哦,这里有一个似是而非的重复:请注意,getchar()
返回一个int
。不是一个char
。这与前面的问题类似。啊,这是有道理的。但是,如果用户输入超过2个字母,然后按enter键,该怎么办呢。这样你的代码就不能很好地工作,因为它只检查第一个字母之后的输入,在本例中是返回/回车键。是的,实际上我们应该根据我们获取输入的方式来编写程序。如果输入后不按空格/回车键,则代码将正常工作。但是,如果你想在每次输入后按这些键,那么你需要一种方法来丢弃多余的字符。这个答案不应该被接受吗?如果用户只是键入“回车”怎么办?旁白:charch代码>应为int ch
匹配getchar()
中的返回值。认为一个字符是char
是一个新手的错误,这是由printf(“%zu\n”,sizeof'a')
的输出显示的,在我的32位int
机器上,它是4
。在哪个程序上@阿贝的还是我的?