我写了一个程序,通过使用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时,程序会将所有字符打印在奇数位置(第一个,第三个,第五个......)而不是第一个字符。我不知道为什么
答案 0 :(得分:3)
每次调用getchar()时,它都会从stdin中吃掉一个字符。您在上面的代码中有两次调用getchar(),并且它们是交替的(在您的while()中进行调用,然后在if()中进行调用)。但是,只有第一个调用存储返回的字符并打印它,第二个调用只是吃掉字符而不做任何事情。一个例子:
输入:&#34;示例&#34;
看看它是如何工作的?
答案 1 :(得分:0)
第二个while
循环读取第一个字符后的所有字符,直到按下换行符。换句话说,它读取行的其余部分并忽略它。
如果将while
更改为if
,则只会读取一个字符,然后继续使用外部循环。这就解释了为什么你把所有这些角色都放在不同的位置上。
答案 2 :(得分:0)
它会忽略其他所有字母。现在,使用第二个while
,您将打印第一个字母并忽略该行中的其余字母。将其更改为if
您读取每个奇数位置的字母。
保持身份识别while
是循环构造,而if
是条件构造。 if
内的任何内容都只会被执行一次。
答案 3 :(得分:0)
当你有一秒钟的时候,这就是你的继续带你的地方。但是当你有一个if时,继续将你带到第一个。然后你有两次调用getchar(),导致奇数位被读取。
您应该尝试逐步调试,以便更好地理解。
答案 4 :(得分:0)
第二个 WHILE 循环将执行,直到看到'\ n'字符。因为在调用 CONTINUE 时,控件转到第二个WHILE循环本身。所以它只打印第一个字符。
但是如果第二个WHILE循环被 IF 循环替换,那么当调用CONTINUE时,控件将转到第一个WHILE循环。这里还调用了 getchar()。因此它可以将字符打印在奇数位置。