我在读一份文件。我节目里的每一件事都是迪纳莫。所以我到处都用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迭代,如果文件是EOF()。我很确定问题是因为那个EOF。该文件已关闭,没有错误。
读取文件后,我的read_number()函数继续返回-1。我试着用了很多东西,但是没有什么改变。
非常感谢!我试着把最重要的部分代码,部分是真正的问题是,但不是所有。如果你不懂什么就告诉我。这件事我已经有5天了。
发布于 2013-12-02 20:04:51
不要使用feof(),fread()的返回值就足够了:
do {
.
.
.
} while (fread(...) == number_of_elements) // 0 or a value smaller than number_of_elements means eof or errorhttps://stackoverflow.com/questions/20336272
复制相似问题