Ошибка формата аргумента - C (СИ)

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

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

warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘int’ [-Wformat=] ); ^
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");
        }
, но 6-ой аргумент состоит из числа от 2 до 5

Решение задачи: «Ошибка формата аргумента»

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");
        }

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

  1. Объявлены массив символов buf размером 256 и файл file.
  2. В цикле while считывается строка из файла в buf.
  3. Используя функцию sscanf, строку из buf разбирают на значения переменных: — p.fam (семейное положение) — p.ini (инициалы) — p.pol (пол) — p.nomer (номер) — p.gold (золото) — p.matem (математика) — p.fizika (физика) — p.rus (русский язык) — p.ball (балл)
  4. С помощью условного оператора sprintf, строки Male и Female заменяются на 'm' и 'f' соответственно.
  5. С помощью условного оператора sprintf, строки Yes и No заменяются на 'y' и 'n' соответственно.
  6. С помощью функции printf выводятся значения переменных на экран.
  7. Дополнительно выводится разделительная строка.
  8. Цикл while продолжается до тех пор, пока из файла не будет считана пустая строка.

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

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