我编译代码然后运行: $ ./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/