【发布时间】:2021-10-31 08:09:30
【问题描述】:
在使用 getchar 尝试不同的事情时,我发现它通常只保护变量中的字符。不知何故,当我使用 while 循环时,行为会发生变化,如果输入不止一个,它会返回更多字符。
这是我的“正常”行为示例代码。 putchar() 只返回一个字符甚至更多被放入:
#include <stdio.h>
main() {
char c;
printf("Type a character in here: ");
c = getchar();
printf("You just typed : ");
putchar(c);
}
当我想在 while 循环中使用它时,putchar() 函数会返回多个字符(如果放入更多字符):
这是第二部分:
#include <stdio.h>
void print_input();
main() {
char c;
printf("Type a character in here: ");
c = getchar();
printf("You just typed : ");
putchar(c);
print_input();
}
void print_input() {
char ch = 'x';
while (ch != '#') {
ch = getchar();
putchar(ch);
}
return;
}
补充问题: 在调试器中运行它时,行为与我在运行时尝试时有所不同。为什么会这样?
【问题讨论】:
-
请给出准确的输入、预期结果和实际结果。
getchar肯定不会返回超过一个字符。所以你需要澄清你看到的确切行为。 -
简单地说,
getchar()每次被调用时只返回一个字符,否则返回不是字符的值EOF。如果您认为它以某种方式一次返回多个字符,那么您就是在误解您的观察结果。但在您解释您实际观察到的情况之前,我们将无法帮助您消除这种误解。 -
getchar()将在您按下回车后从您的行缓冲区一次返回一个字符。您的程序将循环并getchar()直到行缓冲区为空,然后等待新的输入。这是你观察和误解的吗? -
事实上,伙计们,在逐步测试它并在 getchar 和 putchar 之间打印空行之后,循环正在迭代抛出行缓冲区。
-
@Nizde 嗯,它不符合你的期望。