打印一个txt文件的10个最佳结果
Print the 10 best results of a txt file
我找不到解决这个问题的方法。
我有一个这样的文本文件:score.txt
pat 20
ananna 20
radis 19
行数可以在 10 到任何值之间。
我的目标是按顺序打印整数较大的第 10 行。
我试过了,但我什至无法读取文本文件中的数字。
void fillScore(){
FILE* f =NULL;
f= fopen("score.txt", "r");
char name[20];
int score,i,j,tmp;
int tabScore[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
char tabName[10][20];
if (f==NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
while(fscanf(f,"%s%d",name,&score)==1){
printf("TEST : %d - ",score);
for(i=0;i<10;i++){
if(score>tabScore[i]){
tmp=tabScore[i];
tabScore[i]=score;
for(j=i+1;j<10;j++){
score=tabScore[j];
tabScore[j]=tmp;
tmp=score;
}
}
}
}
for(i=0;i<10;i++){
printf("%d\n",tabScore[i]);
}
fclose(f);
}
有人对此有提示吗?我可以知道怎么做。我知道这不是一个好问题,因为它表明缺乏研究,但我发誓我在网上搜索了几个小时。
非常感谢。
您正在根据错误的值 1
测试 fscanf
。
根据手册页,
on success, these functions return the number of input items successfully matched and assigned; this can be fewer than provided for, or even zero, in the event of an early matching failure
由于您要求 *scanf()
转换两个项目,因此您想要对照 2
.
检查其 return 值
以下作品:
...
while(fscanf(f,"%s%d",name,&score) == 2){
...
我找不到解决这个问题的方法。
我有一个这样的文本文件:score.txt
pat 20
ananna 20
radis 19
行数可以在 10 到任何值之间。
我的目标是按顺序打印整数较大的第 10 行。
我试过了,但我什至无法读取文本文件中的数字。
void fillScore(){
FILE* f =NULL;
f= fopen("score.txt", "r");
char name[20];
int score,i,j,tmp;
int tabScore[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
char tabName[10][20];
if (f==NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
while(fscanf(f,"%s%d",name,&score)==1){
printf("TEST : %d - ",score);
for(i=0;i<10;i++){
if(score>tabScore[i]){
tmp=tabScore[i];
tabScore[i]=score;
for(j=i+1;j<10;j++){
score=tabScore[j];
tabScore[j]=tmp;
tmp=score;
}
}
}
}
for(i=0;i<10;i++){
printf("%d\n",tabScore[i]);
}
fclose(f);
}
有人对此有提示吗?我可以知道怎么做。我知道这不是一个好问题,因为它表明缺乏研究,但我发誓我在网上搜索了几个小时。
非常感谢。
您正在根据错误的值 1
测试 fscanf
。
根据手册页,
on success, these functions return the number of input items successfully matched and assigned; this can be fewer than provided for, or even zero, in the event of an early matching failure
由于您要求 *scanf()
转换两个项目,因此您想要对照 2
.
以下作品:
...
while(fscanf(f,"%s%d",name,&score) == 2){
...