首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C: getchar()和putchar()

C: getchar()和putchar()
EN

Stack Overflow用户
提问于 2020-07-08 22:58:05
回答 1查看 720关注 0票数 2

因此,我一直在自学C,我遇到了'stdio.h‘中的'getchar()’和'putchar()‘方法。据我所知,'getchar()‘从文本流中获取最近的字符,并将其存储到一个变量中,而'putchar()’则接受这个变量并将其打印到终端。

因此,我编写了以下代码:

代码语言:javascript
复制
    #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打字,然后再重复。我不太清楚我在这里做错了什么,或者我是否做错了什么,只是不太理解这个概念。有人能解释一下这里发生了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-08 23:01:35

你得到的输出是预期的。

除非您使用特定于OS的功能来更改终端设置,否则终端输入只在输入完整行时才可用于应用程序。终端驱动程序缓冲行,允许您在提交之前进行编辑,输入时它会回显您的输入。

输入行后,每次对getchar()的调用都会从行中检索一个字符(以及最后的换行符)。

但是,您的程序中有一个与您的问题无关的错误。在第一次分配c之前,您正在测试它。此外,c != EOF测试正在检查来自上一次迭代的输入,该迭代已经尝试打印该输入,但您无法打印EOF

编写循环的更好方法是:

代码语言:javascript
复制
while ((c = getchar()) != EOF) {
    printf("You entered : ");
    putchar(c);
    printf("\n");
}

或者,如果组合作业和测试令人困惑,您可以:

代码语言:javascript
复制
while (1) {
    c = getchar();
    if (c == EOF) {
        break;
    }
    puts("You entered: ");
    putchar(c);
    putchar('\n');
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62804875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档