我正在阅读一个文件。我程序中的所有内容都是恐怖的。所以我到处都使用malloc。
以这种方式阅读用户输入:
int read_line(char **cad){
int size = 0;
char *read=NULL;
size_t u=0;
size = (getline(&read, &u, stdin) - 1);
read[strlen(read)-1] = '\0';
*cad = read;
return size;
}
对于整数:
long int read_number(){
char *cad=NULL;
char *garbage=NULL;
long int option=0;
if(read_line(&cad) == 0){
option = -1;
}else{
option=strtol(cad, &garbage, 10);
free(cad);
option = *garbage? -1 : option;
}
return option;
}
事实是,这一直都很完美。但是从我的文件导入数据后,它停止工作。
以下是我阅读数据的方式:
data = (struct data*)malloc(sizeof(struct data));
res = fread(&data->n1, sizeof(int), 1, ptr_file);
do{
res = fread(&data->n2, sizeof(int), 1, ptr_file);
if(res != 0){
insert_node(&list, data);
}else{
ret = -1;
}
data = (struct data*)malloc(sizeof(struct data));
}while(!feof(ptr_file) && (res = fread(&data->n1, sizeof(int), 1, ptr_file))!=0);
我做了do ... while循环,因为我想避免de iteration文件是EOF()。我很确定问题是因为那个EOF。文件已关闭且没有错误。
读取文件后,我的read_number()函数继续返回-1。我试过用fflush,但没有任何改变。
非常感谢!我试图把代码中最重要的部分,部分真正的问题,但不是一切。如果你不明白的话就告诉我。我连续5天都遇到了这个问题。
答案 0 :(得分:0)
不要使用feof(),fread()的返回值就足够了:
do {
.
.
.
} while (fread(...) == number_of_elements) // 0 or a value smaller than number_of_elements means eof or error