所以我一直在教自己C,并且遇到过来自'stdio.h'的'getchar()'和'putchar()'方法。据我了解,'getchar()'从文本流中获取最新字符并将其存储到变量中,而'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”,则输出为:
您输入了:h您输入了:o您输入了:m您输入了:e
但是相反,我得到了:
home您输入了:h您输入了:o您输入了:m您输入了:e
字符将作为即时打字打印,然后重复。我不太确定自己在做什么错,或者如果我做错了什么,只是不太了解这个概念。谁能解释这里发生了什么?
您得到的输出是预期的。
除非您使用特定于OS的功能来更改终端设置,否则只有输入完整行时,终端输入才对应用程序可用。终端驱动程序对行进行缓冲,以允许您在提交之前进行编辑,并且在输入内容时回显您的输入。
输入该行后,每次调用都会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');
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句