Массив структур. Непонятные символы на выходе - 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, что означает успешное выполнение.