C : getchar() and putchar()

标签 c

所以我一直在自学 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 你输入了:米 你输入了:e

但是我得到:

首页 你输入了:h 你输入了:o 你输入了:米 你输入了:e

字符打印为 im typing,然后重复。我不太确定我在这里做错了什么,或者我是否做错了什么,只是不太理解这个概念。谁能解释这里发生了什么?

最佳答案

您得到的输出是预期的。

除非您使用特定于操作系统的功能来更改终端设置,否则终端输入仅在您输入整行时对应用程序可用。终端驱动程序缓冲行以允许您在提交之前进行编辑,并在您输入时回显您的输入。

输入该行后,每次调用 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');
}

关于C : getchar() and putchar(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62804875/

相关文章:

c - 如何使编译器不显示为 void pointer cast 警告

c - 在 c 中阻塞 epoll 中的特定描述符

c - gets_s 给 gcc 错误

c - 基于 fork 的服务器是否可以进行客户端-客户端通信?

c - 在 C 中实现 strcpy 函数

c - libexif 示例在 exif 数据中添加一个小的 Xml 文档

c - isdigit 类似适用于 float 的函数

c - 将指针存储在数组中会受益于 CPU 缓存加速吗?

c++ - 在 Eclipse 中构建 C/C++ 项目时出错 : undefined referenced functions

c - 组播程序丢失数据