繁体   English   中英

C:getchar() 和 putchar()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM