【发布时间】:2019-07-26 04:25:32
【问题描述】:
代码运行良好,只是感觉还有很多错误,给我一点方向,以后可以改进。我想学习如何正确维护代码。
按应有的方式修复代码!
数据.txt
[1] Line numbers 1.
[2] Line numbers 2.
[3] Line numbers 3.
[4] Line numbers 4.
[5] Line numbers 5.
[6] Line numbers 6.
我的代码:
#include <stdio.h>
#include <stdlib.h>
int getLengthFile(char *namafile)
{
FILE *fptr;
int n =0;
fptr = fopen(namafile, "r");
if(fptr != NULL){
char c;
while((c = getc(fptr)) != EOF) {
++n;
}
fclose(fptr);
}
return n;
}
int main(){
FILE *fptr;
int i;
fptr = fopen("Data.txt","r");
if(fptr != NULL){
printf("Succes reads file!\n");
if(getLengthFile("Data.txt")>0){
char strLine[225];
while(fgets(strLine,225,fptr) != NULL){
printf("%s",strLine);
}
}else{
printf("File is empty!\n");
}
fclose(fptr);
}else{
printf("Error reads file!\n");
}
return 0;
}
【问题讨论】:
-
循环
for(;fgets(strLine,225,fptr);fptr){中的最后一个fptr毫无意义。循环使用while (fgets(strLine, sizeof(strLine), fptr) != NULL)是惯例,因为fgets()在EOF(或任何错误)上返回一个空指针。对于显示的代码,变量fptr应该在main()函数中定义——它不应该是一个全局变量。尽可能避免使用全局变量。 -
你怎么“误用了
fgets()”?你的意思是你从某个地方复制了代码并且不明白你复制了什么? -
请注意,
fclose()调用应该在if的主体内。如果代码无法打开文件,fclose()可能会崩溃,因为它不是为处理空指针而设计的。打开文件读取失败的错误信息也不是很好。 -
你能修复代码吗,谢谢大家的回复。
-
下次提问时,请不要发文字图片,而是以文字形式发布。