因此,我一直在自学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
但我得到的是:
您输入的家:h您输入:o您输入:m您输入:e
这些字符被打印为im打字,然后再重复。我不太清楚我在这里做错了什么,或者我是否做错了什么,只是不太理解这个概念。有人能解释一下这里发生了什么吗?
发布于 2020-07-08 23:01:35
你得到的输出是预期的。
除非您使用特定于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');
}https://stackoverflow.com/questions/62804875
复制相似问题