我写了一个程序来使用 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;
}
我的问题是,当我将第二个 while 更改为 if 时,程序将打印奇数位置的所有字符(第一个、第三个、第五个....),而不是仅打印第一个字符。不知道为什么
最佳答案
每次调用 getchar() 时,它都会从标准输入中获取一个字符。您在上面的代码中有两次调用 getchar() ,并且它们是交替的(先调用 while() ,然后调用 if() )。然而,只有第一个调用存储返回的字符并打印它,第二个调用只是吃掉这个字符而不对它做任何事情。一个例子:
输入:“示例”
- 调用 ch=getchar(),获取“E”,并打印 ch,打印“E”。
- getchar() 被调用,获取“x”。没有打印任何内容。
- 调用 ch=getchar(),获取“a”,然后打印 ch,打印“a”。
- getchar() 被调用,获取“m”。没有打印任何内容。
- 调用 ch=getchar(),获取“p”,然后打印 ch,打印“p”。
- getchar() 被调用,获取“l”。没有打印任何内容。
- 调用 ch=getchar(),获取“e”,并打印 ch,打印“e”。
看看它是如何工作的?
关于c - 只读取一行的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965823/