求纠错:恕我眼拙,实在看不出哪里有问题
下面这个代码作用是从两个文件中逐行分别读取数据,然后从读出的每一行数据中提取名字、分数、字数等信息。但用了几个编译器都通过编译了,但一运行就歇菜。我看了很久不知错在何处,debugging又还没有学,麻烦前辈们给诊断一下。万分感谢!
注:其中注释掉的代码是之前的一个解法,能通过且能正常运行,但改成下面这个之后就不行了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 64 //最大名字长度
#define SIZE 120 //最大人数
int main(void)
{
FILE *fp1, *fp2, *fp3;
char names_1[SIZE][MAX], names_2[SIZE][MAX]; //用以读取每一行参赛者信息
int cnt_1 = 0, cnt_2 = 0, cnt_3 = 0, i,j;
char nms_1[SIZE][MAX], nms_2[SIZE][MAX]; //用以装载参赛者的姓名
float mks_1[SIZE], mks_2[SIZE]; //用以装载参赛者获得的分数
int wds_1[SIZE], wds_2[SIZE]; //用以装载参赛者所写的字数
//char * str, * nstr;
//char ch;
if((fp1 = fopen("marks1.txt", "r")) == NULL)
{
fprintf(stderr, "Error reading %s\n","marks1.txt");
exit(1);
}
if((fp2 = fopen("marks2.txt", "r")) == NULL)
{
fprintf(stderr, "Error reading %s\n","marks2.txt");
exit(2);
}
if((fp3 = fopen("results3.txt", "w")) == NULL)
{
fprintf(stderr, "Error writing %s\n","results3.txt");
exit(3);
}
while(cnt_1 < SIZE && fgets(names_1[cnt_1],MAX, fp1) != NULL) //读取每一行信息
{
/*str = names_1[cnt_1];
nstr = nms_1[cnt_1];
while(*str)
{
if(*str == '\t')
break;
*nstr = *str;
str++;
nstr++;
}
*nstr = '\0';*/
cnt_1++;
}
while(cnt_2 < SIZE && fgets(names_2[cnt_2],MAX, fp2) != NULL)
{
/* str = names_2[cnt_2];
nstr = nms_2[cnt_2];
while(*str)
{
if(*str == '\t')
break;
*nstr = *str;
str++;
nstr++;
}
*nstr = '\0'; */
cnt_2++;
}
for(i = 0; i < cnt_1; i++)
{
if(sscanf(names_1[i], "%s%f%d",nms_1[i],mks_1[i],wds_1[i]) != 3) //抽取信息
{
puts("\nError reading data");
exit(0);
}
if(fprintf(fp3, "%s %.1f %d\n",nms_1[i],mks_1[i],wds_1[i]) != 3) //写入文件
{
puts("\nError writing data");
exit(0);
}
}
for(i = 0; i < cnt_2; i++)
{
if(sscanf(names_2[i], "%s%f%d",nms_2[i],mks_2[i],wds_2[i]) != 3)
{
puts("\nError reading data");
exit(0);
}
if(fprintf(fp3, "%s %.1f %d\n",nms_2[i],mks_2[i],wds_2[i]) != 3)
{
puts("\nError writing data");
exit(0);
}
}
/*fprintf(fp3, "Names found to exist in both file 1 and file 2:\n");
for(i = 0; i < cnt_1; i++)
for(j = 0; j < cnt_2; j++)
if(strcmp(nms_1[i], nms_2[j]) == 0)
{
fprintf(fp3, "%s\n%s\n", names_1[i], names_2[j]);
cnt_3++;
}
fprintf(fp3, "Found: %d", cnt_3);*/
fclose(fp1);
fclose(fp2);
fclose(fp2);
return 0;
}