【发布时间】:2016-08-02 21:01:18
【问题描述】:
我正在尝试编写一个读取文件并从中打印字符的代码。如果字符不可读,它应该打印?。如果文件有错误,代码返回-1,否则返回读取的字符数量。不知何故,这无法正常工作,因为我无法编译它。
int printfile(const char *filename)
{
FILE *f = fopen(filename, "r");
int i, c;
char k = "?";
while ((i = fgetc(f)) != EOF ) {
c++;
if(isprint(i)){
printf("%c ", i);
}
else if (ferror(f)) return -1;
else {
printf("%c", k);
}
}
return c;
}
我应该为此保留一些空间还是让它工作,或者代码是错误的。
【问题讨论】:
-
在什么情况下不能正常工作?
-
“不知怎的,这不能正常工作”不是有用的错误描述。输入、预期输出、观察到的输出。那是调试 101,真的。此外,您的示例代码应该编译成一个程序,即有一个
int main()和所有必要的包含。 -
首先,你不初始化
c。它开始的值是不确定的。其次,您不要使用fclose()关闭文件。第三,您永远不会检查原始fopen()是否成功。 -
你的
printf("%c ", i);打印一个额外的空间;这是故意的吗?此外,对于stdout的单个字符,您可以使用putchar( i );,这样更有效。char k = "?";坏了;"?"是char []类型,有两个元素'?'和'\0'。您正在将数组的地址分配给char... -
"...因为我无法编译它。" - 严重地? 真的吗?这是你的编辑?编译器可能告诉您,
FILE(缺少#include <stdio.h>)、isprint()的隐式声明(缺少#include <ctype.h>)和缺少main()没有意义。但甚至不包括实际的编译器错误消息只是 LAZY。