C: 简单复制输入 (getchar) 到输出 (printf) 返回额外的行

标签 c printf getchar

我正在用 C 测试一个简单的程序:

int main() {
    int c;

    c  = getchar();

    while ( c != EOF ) {
        printf("%c\n", c);
        c = getchar();
    }
}

但是,当我提供简单的输入,如“a”、“b”时,它会打印出“a\n\n, b\n\n”...有人可以解释一下吗?谢谢!

☛  gcc hello.c; ./a.out
a
a


b
b


c
c

最佳答案

因为它获取 EOL 字符以及您键入的字符。

您的输入不是“a”、“b”,而是“a\nb\nc\n”,并且您的脚本配置为(基本上)在每个字符后输出一个新行。

所以第一次通过循环时,它获取 'a' 并打印 'a\n',然后它获取 '\n' 并打印 '\n\n'。然后是 'b' 和 'b\n' 等。

试穿这个尺寸:

int main() {
    int size = 500;
    char buff[size];
    char* check;
    int read;


    check = fgets(buff, sizeof(buff), stdin);

    while ( check != NULL ) {
        printf("%s", buff);
        check = fgets(buff, sizeof(buff), stdin);
    }
}

关于C: 简单复制输入 (getchar) 到输出 (printf) 返回额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947541/

相关文章:

c - 如何以字节为单位获取函数的长度?

c - 为什么我们不两次引用 char 指针数组?

c - 奇怪的结果打印指针作为 C 中的 float

java - Java 的 printf() 方法对于连接和打印字符串是否有效?

go - 有没有类似于 getchar() 直到 EOF 的 Go 函数?

c - 变量/函数可以声明任意次,但只能定义一次

c - I2C接收、PIC中错误数据接收

haskell - 将 double 列表格式化为字符串

c - 为什么我不能在第一个代码中将五个字符输入到数组中,但在使用第二个代码中所示的 getchar() 时可以?

c - getchar() 等同于 scanf ("%c") 和 putchar() 等同于 printf ("%c") 吗?