在C中的同一循环中读取具有相同行数的多个文件
发布时间:2020-12-16 09:48:14 所属栏目:百科 来源:网络整理
导读:我有两个文件,都有47k行.我正在尝试同时读取每个文件的行.问题是只读取每个文件的第一行.那是我写的代码: id_region = fopen(argv[3],"r");prediction=fopen(argv[4],"r");int prediction_class,class,region;while ((fscanf(id_region,"%d 1:%d",class,reg
我有两个文件,都有47k行.我正在尝试同时读取每个文件的行.问题是只读取每个文件的第一行.那是我写的代码:
id_region = fopen(argv[3],"r"); prediction=fopen(argv[4],"r"); int prediction_class,class,region; while ((fscanf(id_region,"%d 1:%d",&class,®ion) == 2) && (fscanf(prediction,"%d",&prediction_class) == 1)) { fprintf(stderr,"nRegi?o %d",region); fprintf(stderr,"nClasse %d",class); fprintf(stderr,"nPredi??o %d",prediction); } 我的代码有什么问题? 编辑:我尝试了这段代码,但是当我运行它时我遇到了分段错误.这有什么不对? int main(int argc,char** argv) { FILE* id_region; FILE* prediction; id_region = fopen(argv[1],"r"); prediction=fopen(argv[2],"r"); char line[50]; char line2[50]; int prediction_class,region,temp1,temp2; while((fgets (line,10,prediction) != NULL) && (fgets (line2,id_region)!=NULL)) { //formating the input temp1=fscanf(line,&prediction_class); temp2=fscanf(line2,®ion); fprintf(stderr,"nRegion: %d",region); fprintf(stderr,"nPrediction: %d",prediction_class); } fclose(prediction); fflush(prediction); fclose(id_region); fflush(id_region); return(0); } 由此代码解决了! int main(int argc,char** argv) { FILE* id_region; FILE* prediction; id_region = fopen(argv[1],"r"); prediction=fopen(argv[2],"r"); char line[50]; char line2[50]; int prediction_class,class; contador=0; while((fgets(line,prediction)!= NULL) && (fgets(line2,20,id_region)!=NULL)) { sscanf (line,&prediction_class); sscanf (line2,®ion); fprintf(stderr,region); fprintf(stderr,prediction_class); } fclose(prediction); fflush(prediction); fclose(id_region); fflush(id_region); return(0); } 解决方法
而不是fscanf(),你应该使用fgets()来获取每一行,并使用sscanf()从行中获取格式化的输入.
对于编辑过的问题,我发现至少有两个问题:你仍在使用fscanf(),而它应该是sscanf().并且在使用fclose()关闭流之后使用fflush().实际上fclose()会导致流刷新,你不需要手动刷新它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |