Ошибка формата аргумента - 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
Похожие ответы