Массив структур. Непонятные символы на выходе - 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; }
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Объявляется функция
go()
, которая выполняет действия с данными. - Определяется максимальное количество элементов в массиве структур
addr_list
с помощью#define MAX 100
. - Инициализируются переменные:
i
- счётчик, используемый в циклах.numLines
- количество строк в файле.c
- текущий символ, считываемый из файла.fp
- указатель на файл для чтения.addr_list
- массив структур, содержащих фамилию и оценку.score
- переменная для хранения оценки.
- Открывается файл
/Users/nikitaefimenko/Desktop/test.txt
с помощью функцииfopen()
для чтения. - С помощью цикла
while
считываются все символы из файла до конца строки. ПеременнаяnumLines
увеличивается на 1 при каждой новой строке. - С помощью функции
fseek()
указатель возвращается к началу файла. - С помощью цикла
for
считываются строки из файла и сохраняются в массиве структурaddr_list
. - С помощью цикла
for
выводятся на экран фамилии и оценки из массива структурaddr_list
. - Файл закрывается с помощью функции
fclose()
. - Функция
go()
возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д