Массив структур. Непонятные символы на выходе - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! На выходе программа выводит непонятные символы, в основном числа и слэши. Объясните, пожалуйста, в чем ошибка? fp: Иванов 3 Петров 4 Федоров 5
int go() //выполняем действия с данными
{
    #define MAX 100
    int i;
    struct addr {
        char surname[10];
        int score[3];
    } addr_list[MAX];
    FILE *fp;
    fp=fopen("/Users/.../Desktop/test.txt","w+");
    for(i=1;i<MAX;++i) fscanf(fp,"%s %n\n", addr_list[i].surname, addr_list[i].score);
    for(i=1;i<MAX;++i) printf("%s %n\n", addr_list[i].surname, addr_list[i].score);
    fclose(fp);
    return 0;
}

Решение задачи: «Массив структур. Непонятные символы на выходе»

textual
Листинг программы
int go() //выполняем действия с данными
{
    #define MAX 100
    int i;
    int numLines=0;
    char c;
    struct addr {
        char surname[11];
        int score;
    } addr_list[MAX];
    FILE *fp;
    fp=fopen("/Users/nikitaefimenko/Desktop/test.txt","r");
    while ((c = fgetc(fp)) != EOF) {
        if (c=='\n') ++numLines;}
    fseek(fp, 0L, SEEK_SET);
    for(i=0;i<=numLines;++i) fscanf(fp,"%s %d\n", addr_list[i].surname, &addr_list[i].score);
    for(i=0;i<=numLines;++i) printf("%s %d\n", addr_list[i].surname, addr_list[i].score);
    
    fclose(fp);
    return 0;
}

Объяснение кода листинга программы

В этом коде выполняются следующие действия:

  1. Объявляется функция go(), которая выполняет действия с данными.
  2. Определяется максимальное количество элементов в массиве структур addr_list с помощью #define MAX 100.
  3. Инициализируются переменные:
    • i - счётчик, используемый в циклах.
    • numLines - количество строк в файле.
    • c - текущий символ, считываемый из файла.
    • fp - указатель на файл для чтения.
    • addr_list - массив структур, содержащих фамилию и оценку.
    • score - переменная для хранения оценки.
  4. Открывается файл /Users/nikitaefimenko/Desktop/test.txt с помощью функции fopen() для чтения.
  5. С помощью цикла while считываются все символы из файла до конца строки. Переменная numLines увеличивается на 1 при каждой новой строке.
  6. С помощью функции fseek() указатель возвращается к началу файла.
  7. С помощью цикла for считываются строки из файла и сохраняются в массиве структур addr_list.
  8. С помощью цикла for выводятся на экран фамилии и оценки из массива структур addr_list.
  9. Файл закрывается с помощью функции fclose().
  10. Функция go() возвращает 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы