Так что я медленно продолжаю учиться C. И теперь у меня есть задача - прочитать данные из файла и отсортировать их.
Данные файла:
House naming 1 30 300
House naming 2 45 450
.......
House naming 10 5 120
Итак, первое значение: House naming
, может быть любым именем, например Empire state building
Второе значение: адрес дома (я выбрал только integer
значения)
Третье значение: возраст здания
Четвертое значение: киловатт-час / год
Программа должна взять данные из файла -> Распечатать -> Сортировать (как? См. Ниже) -> Распечатать снова, отсортировано.
Сортировка:
- кВт / ч <200 - устойчивое здание, </li>
- кВт / ч <300 && возраст <40 - нуждается в ремонте, </li>
- кВт / ч> 300 && возраст> 40 - установлен для сноса.
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include "input.h"
int main(void) {
int kwh;
int age;
char building[SIZE];
int addr;
char buff[SIZE];
FILE *fi;
// opening the files and checking if it succeeded
fi = fopen(F_INPUT, "r");
if (fi == NULL) {
printf("Error opening input file \"%s\"", F_INPUT);
exit(EXIT_INPUT_FAIL);
}
while (fgets(buff, sizeof(buff), fi) != NULL) {
sscanf(buff, "%s %d %d %d", building, &addr,&age,&kwh);
if (kwh < 200) {
puts(buff);
printf("Sustainable\n");
} else
if (kwh < 300 && age < 40) {
puts(buff);
printf("Needs renovation\n");
} else
if (kwh > 300 && age > 40) {
puts(buff);
printf("IN DEMOLITION LIST\n");
}
}
/* close the files when they're not needed anymore */
fclose(fi);
return 0;
}
Я сделал несколько шагов, чтобы сделать его немного проще, читает данные -> выходные данные уже отмечены 1 ) Устойчивое, 2) Требуется ремонт, 3) Установить на снос.
Проблема где-то в while
l oop, и я думаю, что это в функции sscanf
. В моей логи c, если я не ошибаюсь, она должна прочитать строку из файла, используя логи c (посмотрите sscanf
и входной файл): char value
, integer
, integer
, integer
. Программа читает файл, выводит данные, но помечает все здания как sustainable
.
Что вы предлагаете прочитать более внимательно или какую логику c лучше выбрать для чтения нескольких строк.
Выход:
House naming 1 30 300
Sustainable
House naming 2 45 450
Sustainable
........
House naming 10 5 120
Sustainable