我正在参加关于“C”的培训课程并遇到问题。这很难解释,所以我会发布代码。这是训练语法,所以不要问我为什么这样做。当这两个段块都在main()中运行时,第二个块的行为不像在main()中单独存在。我已经尝试了几个IDE认为它可能是一个错误。找不到为什么getchar()正在为第一次出现的换行符C
/* First Segment Block */
int c;
printf("Type a letter: ");
c = getchar();
printf("You typed '%c'\n",c);
/* OR - outputs the same, to demonstrate putchar */
printf("You typed '");
putchar(c);
printf("'\n\n");
/* Second Segment Block */
int a,b,d;
printf("Type two letters: ");
a = getchar();
b = getchar();
d = getchar();
printf("You typed '");
putchar(a);
printf("' and '");
putchar(b);
printf("' and '");
putchar(d);
printf("'\n");
在第二部分块中,我添加了第三个变量来测试我的理论。当你输入所要求的两个字母时,第一个getchar()会选择一个新行,第二个getchar()会选取第一个字母。第三个getchar()拿起第二个字母。如果注释掉整个第一个段的块,那么它的行为是正确的,第一个getchar()获取第一个字母,第二个获取第二个getchar(),显示输出。
以下是两者一起运行时的输出。
Type a letter: k
You typed (k)
You typed 'k'
Type two letters: lk
You typed '
' and 'l' and 'k'
RUN SUCCESSFUL (total time: 9s)
当它们单独运行时,输出如下。
第一部分输出。
Type a letter: k
You typed (k)
You typed 'k'
RUN SUCCESSFUL (total time: 5s)
第二部分输出。
Type two letters: rf
You typed 'r' and 'f' and '
'
RUN SUCCESSFUL (total time: 5s)
第3个getchar()是一个换行符,这是预期的。
任何人都可以解释为什么当两个段运行在同一个主要(),行为是不同的,当运行分开?
谢谢你在前进, 丹尼尔N.(C语言初学者)
回答完第一个提示后,您是否按回车?该换行符被下一个'getchar()'读取。 – Barmar
当你输入第一个字母时,你也会碰到return,它显示为一个换行符。第二个'getchar()'读取换行符,然后读取两个字母(输入中有未读的换行符)。这是预期的行为。如果您键入'abc'并返回,那么事情就会像您期望的那样更加接近......除了额外的'getchar()'调用将会返回而无需您输入更多内容。 –
换行符(''\ n'')也是'char' .. – chux