我正在编写一个读取给定文件并将其内容打印到屏幕的函数。目前我有以下内容:
int textdump(const char *filename)
{
int n = 0;
char ch;
FILE *fileHandle;
fileHandle = fopen(filename, "r");
if ((fileHandle = fopen(filename, "r")) == NULL)
{
return -1;
fclose(fileHandle);
}
while ((ch = fgetc(fileHandle) != EOF) )
{
printf("%c", ch);
n++;
}
fclose(fileHandle);
if (fclose(fileHandle) == EOF)
{
return EXIT_FAILURE;
}
return n;
}
函数成功读取文本文件,并正确返回每个文件的字符数。但后来我尝试打印字符,现在我什至无法运行程序 - 我得到“运行失败 - 文档不能为空,无法解析测试结果”。
最佳答案
总结上面代码的问题,
- 在您的代码中,为什么要执行两次
fopen()
/fclose()
?摆脱那部分。 --------------(1) - 您不需要
fclose()
尚未打开的内容。 ----------------------------------------------(2) return
之后的所有语句均无效。 ---------------------------------------------- ----(3)- 照顾operator precedence在使用
fgetc()
时。 ----------------------------------------(4) -
fgetc()
返回int
值。相应地改变。 ----------------------------------------------(5)
所以,你的代码看起来像
int textdump(const char *filename)
{
int n = 0;
int ch = 0;
FILE *fileHandle = NULL;
//fileHandle = fopen(filename, "r"); //not reqd --- (1)
if ((fileHandle = fopen(filename, "r")) == NULL){
return -1;
//fclose(fileHandle); // not reqd --- (2), (3)
}
while ( (ch = fgetc(fileHandle)) != EOF ){ //notice here -- (4), (5)
printf("%c", ch);
n++;
}
fclose(fileHandle);
/*
if(fclose(fileHandle) == EOF){ -- (1)
return EXIT_FAILURE;
}*/
return n;
}
关于c - 在 C 中读取文本文件并将其内容打印到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745907/