Распечатайте 10 лучших результатов из txt-файла

Я не могу найти способ решить эту проблему.

У меня есть такой текстовый файл: 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);
}

У кого-нибудь есть намек на это? Я могу понять, как это сделать. Я знаю, что это не очень хороший вопрос, потому что он показывает отсутствие исследований, но я клянусь, что я часами ищу в Интернете.

Большое спасибо.

Из man fscanf: в случае успеха эти функции возвращают количество успешно сопоставленных и назначенных элементов ввода; это может быть меньше, чем предусмотрено, или даже ноль, в случае отказа раннего сопоставления. Возможно == 1 это не то, что вы хотите

Jack 22.04.2022 20:50

Если это не вопрос домашнего задания, я бы использовал разные инструменты, которые созданы для таких вещей, например, perl -ne '/(\d+)/; $t = $_ ;for (0..9) { if ($s[$_]->[0] < $1) { splice(@s, $_, 0, [$1, $t]); last } }; END { print map { $_->[1] } @s[0..9] }' < file

niry 22.04.2022 21:30
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы проверяете fscanf неправильное значение 1.

Согласно справочной странице,

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){
...

Другие вопросы по теме