[英]Reading Only the First Character of a Line
我编写了一个程序,使用C读取一行中的第一个字符,这是我的代码:
#include <stdio.h>
int main(void) {
char ch;
printf("Please type text for test(# for terminate)\n");
while((ch = getchar()) != '#') {
printf("\n %c", ch);
while (getchar() != '\n')
continue;
printf("\nPlease type text for test(# for terminate)\n");
}
return 0;
}
我的问题是,当我将第二个字符更改为if时,程序将所有字符打印在奇数位置(第一个,第三个,第五个...),而不是仅打印第一个字符。 我不知道为什么
每次调用getchar()时,它都会吃掉stdin中的单个字符。 您在上面的代码中有两次对getchar()的调用,并且它们是交替的(在while()中进行了调用,然后在if()中进行了调用)。 但是,只有第一个调用会存储返回的字符并进行打印,而第二个调用只会吃掉该字符,并且不执行任何操作。 一个例子:
输入:“示例”
看看如何运作?
第二个while
循环读取第一个字符之后的所有字符,直到按下换行符为止。 换句话说,它将读取该行的其余部分并忽略它。
如果将while
更改为if
,则它仅读取一个字符,然后继续进行外循环。 这就解释了为什么将所有这些字符放在不同的位置。
它将仅忽略其他所有字母。 现在,第二个while
,您将打印第一个字母,而忽略该行中的其余字母。 if
您阅读每个奇数位置的字母, if
其更改为。
if
是条件构造,请while
循环构造时注意id。 if
里面的任何东西都只会执行一次。
当您有一秒钟的时间时,这就是您继续进行的地方。 但是,如果您遇到的话,继续操作会将您带到第一时间。 然后,您有2次对getchar()的调用,导致读取了奇数个位置。
您应该尝试分步调试以更好地理解。
第二个WHILE循环将执行直到看到'\\ n'字符为止。 由于调用CONTINUE时,控制权转到了第二个WHILE循环本身。 因此,它仅打印第一个字符。
但是,如果将第二个WHILE循环替换为IF循环,则在调用CONTINUE时,控制转到第一个WHILE循环。 这里也调用了getchar() 。 因此它将打印字符保持在奇数位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.