Ошибка формата аргумента - C (СИ)
Формулировка задачи:
warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘int’ [-Wformat=]
);
^
, но 6-ой аргумент состоит из числа от 2 до 5
while (fread(&p, sizeof(p), 1, file) == 1) { printf("|%16s|%10s|%9s|%7d|%8s|%12d|%8d|%10d|%8d|\n", p.fam, p.ini, p.pol == 'm' ? "Male" : "Female", p.nomer, p.gold, p.matem, p.fizika, p.rus, p.ball ); printf("+----------------+----------+---------+-------+--------+------------+--------+----------+--------+\n"); }
Решение задачи: «Ошибка формата аргумента»
textual
Листинг программы
char buf[256]; while (fgets(buf, 256, file)) { sscanf(buf, "%s %s %c %d %c %d %d %d %d", &p.fam, &p.ini, &p.pol, &p.nomer, &p.gold, &p.matem, &p.fizika, &p.rus, &p.ball); printf("|%16s|%10s|%9c|%7d|%8c|%12d|%8d|%10d|%8d|\n", p.fam, p.ini, p.pol,//== 'm' ? "Male" : "Female", p.nomer, p.gold,//== 'y' ? "Yes" : "No", p.matem, p.fizika, p.rus, p.ball); printf("+----------------+----------+---------+-------+--------+------------+--------+----------+--------+\n"); }
Объяснение кода листинга программы
- Объявлены массив символов buf размером 256 и файл file.
- В цикле while считывается строка из файла в buf.
- Используя функцию sscanf, строку из buf разбирают на значения переменных: — p.fam (семейное положение) — p.ini (инициалы) — p.pol (пол) — p.nomer (номер) — p.gold (золото) — p.matem (математика) — p.fizika (физика) — p.rus (русский язык) — p.ball (балл)
- С помощью условного оператора sprintf, строки
Male
иFemale
заменяются на 'm' и 'f' соответственно. - С помощью условного оператора sprintf, строки
Yes
иNo
заменяются на 'y' и 'n' соответственно. - С помощью функции printf выводятся значения переменных на экран.
- Дополнительно выводится разделительная строка.
- Цикл while продолжается до тех пор, пока из файла не будет считана пустая строка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д