Предупреждение компилятора GCC: формат «% c» ожидает аргумент типа «char *», но аргумент 2 имеет тип «int *» [-Wformat] - PullRequest
0 голосов
/ 20 февраля 2012

При попытке скомпилировать код я получаю следующее предупреждение:

упражнения6.c: 32: 14: предупреждение: формат "% c" ожидает аргумент типа "char *", но аргумент 2 имеетвведите 'int *' [-Wformat]

Что вызывает это предупреждение и как его исправить?

/*Write a program that displays the contents of a file at the terminal 20 lines at
a time. At the end of each 20 lines, have the program wait for a character to be
entered from the terminal. If the character is the letter q, the program should
stop the display of the file; any other character should cause the next 20 lines
from the file to be displayed.*/

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    int c, i;
    FILE *file;

    if ( (file = fopen ("text", "r")) == NULL )
    printf ("Error opening the file.\n");

    for ( i = 0; i < 20; ) {
        c = getc (file);

        if ( c == EOF ) {
            fclose (file);
            exit (EXIT_SUCCESS);
        }

        putc (c, stdout);

        if ( c == '\n' )
            ++i;

        if ( i == 20 ) {
            scanf ("%c", &c);
            if ( c == 'q' ) {
                fclose (file);
                exit (EXIT_SUCCESS);
            }
            i = 0;
        }
    }
}

1 Ответ

5 голосов
/ 20 февраля 2012

Определите char ch и используйте его в scanf.

int c, i;
char ch;

/* ... */
scanf ("%c", &ch);

Использование несовпадающих аргументов для scanf является технически неопределенным поведением.

...