首页 > 解决方案 > 使用 getchar() 时出现意外输入,使用 putchar() 时出现意外输出

问题描述

我是 c 新手,对它了解甚少,但据我了解,此代码应该打印我输入的字符(它应该打印两次),或者打印我的字符的位的数字表示,然后是我的字符(在再次要求输入 100 个循环之前)但它似乎两者都没有。

相反,它打印一些随机数(我假设表示为数字)然后是字母,然后是 10。

我正在使用 gcc 在 wsl 上运行的 ubuntu 18.04 上编译它,如果这有什么不同的话。再一次我是一个完全的新手,所以我不知道这是否是一个可能的错误点。

这是我的代码:

#include <stdio.h>
int c;


 int main() {
    
 
    for(int x =0; x < 100; x++){
        c = getchar();
        printf("%d", c);
        putchar( c );

    }
}

例子:

输入:f

输出:102f10

或者

输入:r

输出:114r10

标签: ccharnewlinegetcharputchar

解决方案


输入此调用读取的字符后

c = getchar();

'\n'然后输入缓冲区还存储了由于按下 Enter 键而出现的换行符。

因此在这个循环中

for(int x =0; x < 100; x++){
    c = getchar();
    printf("%d", c);
    putchar( c );

}

例如,如果您输入了字符,'f'则此调用

    printf("%d", c);

输出了它的内部代码

102

之后下一个电话

    putchar( c );

输出字符本身。

f

现在输入缓冲区包含换行符'\n'。在循环的下一次迭代中,它的内部表示

10

由调用输出

    printf("%d", c);

而不是打电话

c = getchar();

利用

scanf( " %c", &c );
        ^

注意格式字符串中的空白。'\n'在这种情况下,将跳过空格字符,例如换行符。


推荐阅读