【发布时间】:2020-10-31 11:11:41
【问题描述】:
我正在尝试创建一个函数,该函数从文件中读取一些带有学生姓名的成绩并按降序打印成绩。这是函数:
char studenteUN[50];
int punti;
int maxP = MAX_LNG;
int max = -1000;
int min = MAX_LNG;
FILE *ftemp = f;
while(fscanf(ftemp, "%s", studenteUN) != EOF){
fscanf(ftemp, "%d", &punti);
if(punti < min)
min = punti;
}
while (maxP != min) {
max = -1000;
ftemp = muovi(f);
while(fscanf(ftemp, "%s", studenteUN) != EOF){
fscanf(ftemp, "%d", &punti);
if(punti > max && punti < maxP)
max = punti;
}
maxP = max;
ftemp = muovi(f);
while(fscanf(ftemp, "%s", studenteUN) != EOF){
fscanf(ftemp, "%d", &punti);
if(punti == max)
printf("%s %d\n", studenteUN, punti);
}
}
输出如下:
阿斯达斯 8 阿斯达斯 7 六号 安德里亚 5 asd 4 asd 1 阿萨德 1 阿斯达斯 0 0我无法弄清楚为什么会发生这种情况。 我从中读取的文件如下:
2
1- askd a
1- asd
2- asd as
3- asd as d
4- asdas
5- Non lo so.
1
2- asdsad asd as d
1- asd a
2- asd
3- asd
4- as df
5- Non lo so.
2
andrea 5
asdsa 6
asdas 7
asd 1
asdas 0
asd 0
asdsad 1
asdas 8
asd 4
muovi 功能:
FILE *muovi(FILE *f){
fseek(f, 0, SEEK_SET);
char resultato[MAX_LNG];
int nD;
fscanf(f, "%d", &nD);
printf("\n");
for(int i = 0; i <= nD*7;i++)
fgets(resultato, MAX_LNG, f);
return f;
}
【问题讨论】:
-
什么是
muovi(f)?和fseek(f, 0, SEEK_SET)一样吗? -
请edit您的问题包含minimal reproducible example,包括您从中读取的输入文件的示例。
-
我把你的代码放在
main()函数中,我无法重现问题。 -
因为
printf("\n");inmuovi() -
顺便说一句,这是一种可怕的方法,重新读取每个地方的文件。将所有内容读入结构数组,对数组进行排序,然后打印数组。