[英]C : getchar() and putchar()
所以我一直在自学 C,我遇到了来自 'stdio.h' 的 'getchar()' 和 'putchar()' 方法。 据我了解,“getchar()”从文本 stream 中获取最新字符并将其存储到变量中,而“putchar()”则获取该变量并将其打印到终端。
所以我写了以下代码:
#import<stdio.h>
void main () {
printf("Enter a character and it will be repeated back to you:\n");
int c;
while (c != EOF) {
c = getchar();
printf("You entered : ");
putchar(c);
printf("\n");
}
}
我希望它能够读取键盘输入并将其一次打印到屏幕上一个字符。 例如,如果我输入“home”,output 将是:
您输入:h 您输入:o 您输入:m 您输入:e
但相反我得到:
home 您输入:h 您输入:o 您输入:m 您输入:e
字符在输入时打印,然后重复。 我不太确定我在这里做错了什么,或者我是否做错了什么,只是不太了解这个概念。 谁能解释这里发生了什么?
预计您将获得 output。
除非您使用特定于操作系统的功能来更改终端设置,否则终端输入仅在您输入整行时对应用程序可用。 终端驱动程序缓冲行以允许您在提交之前进行编辑,并在您输入时回显您的输入。
输入该行后,每次调用getchar()
都会从该行中检索一个字符(以及最后一个换行符)。
但是,您的程序中有一个与您的问题无关的错误。 在第一次分配之前,您正在测试c
。 此外, c != EOF
测试正在检查上一次迭代的输入,该迭代已经尝试打印该输入,但您无法打印EOF
。
编写循环的更好方法是:
while ((c = getchar()) != EOF) {
printf("You entered : ");
putchar(c);
printf("\n");
}
或者,如果组合作业和测试令人困惑,您可以执行以下操作:
while (1) {
c = getchar();
if (c == EOF) {
break;
}
puts("You entered: ");
putchar(c);
putchar('\n');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.