c - 重定向标准输入

标签 c io stdin

我编译代码然后运行: $ ./a.exe < input.txt 由于某种原因,它不读取第一个字符(第一行测试中缺少 t) 最后还有一个奇怪的角色。我该如何解决这两个错误? 谢谢

#include <stdio.h>
#include <stdlib.h>

int main(void) {    
    char c = getchar();    
    while (c != EOF){
        printf("%c ",c); 
        c = getchar();
    }
    return (0);
}        

执行示例:

$ ./a.exe < input.txt
  e s t   l i n e   o n e
 t e s t   l i n e   t w o
 f i n a l   l i n e ▒ 

最佳答案

首先,请注意,当 while 首次执行时,c 未分配。

然后,请注意,当读取倒数第二个字符时,您的 while 测试将通过,从而读取并打印另一个字符 - 因此您将看到 EOF 的视觉表示形式:最后一个字符。

如果您将文件通过管道传输到该程序中,我怀疑您编写的行之前的某些内容会导致 T 被省略。

您可以通过执行以下操作来避免其他问题:

    #include <stdio.h>
    #include <stdlib.h>

    int main(void) {    
        int c = getchar();    
        while (c != EOF){
            printf("%c ",c); 
            c = getchar();
        }
        return (0);
    }

编辑:我还建议我们遵循上面评论中 user3125367 的建议,这消除了从 int 到 char 的一些偷偷摸摸的转换。我在上面进行了编辑以使用 int.这也可以让您使用 %n 来查看文件中第一个字符的实际值,和/或它可以解决问题(即文件中的第一个字符可能看起来像 T,但已被值大于 255 的非 ASCII 字符。)

关于c - 重定向标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133267/

相关文章:

颜色转换在 opencv 中不起作用?

python - Errno 13 - 文档文件夹中的权限被拒绝?

Python sys.stdin.read()接受输入条件打印提示两次

c - 从技术角度来看,MinGW 做了什么使 gcc 在 Windows 上成为可能?

c - Linux 执行程序; ls 无法访问 |,没有那个文件或目录

c - AES 在汇编中的实现

c# - 在 C# 中搜索 ASCII 文件以获取简单关键字的最快方法?

java - FileChannel 和 FileInputStream 中 read(ByteBuffer) 和 read(byte[]) 之间的区别

c - 试图理解标准输入,标准输出

c - 我如何在标准输入中寻找