Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 循环问题-重复指令两次而不是一次_C_Loops_For Loop_Char_Break - Fatal编程技术网

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”作为第一

在这里学习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();
    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
。在哪个程序上@阿贝的还是我的?