Ошибка компиляции GCC: формат "% c" ожидает аргумент типа "char *", но аргумент 2 имеет тип "int" [-Wformat] - PullRequest
6 голосов
/ 31 января 2012

Хорошо, я новичок с C, но я думаю, что код является основным и простым. Эта программа предназначена для колледжа и должна иметь функцию isdigit (). Вот код

//by Nyxm
#include <stdio.h>
#include <ctype.h>

main()
{
    char userChar;
    int userNum, randNum;
    srand(clock());
    printf("\nThis program will generate a random number between 0 and 9 for a user to guess.\n");
    /*I changed it from '1 to 10' to '0 to 9' to be able to use the isdigit() function which
    will only let me use a 1 digit character for an argument*/
    printf("Please enter a digit from 0 to 9 as your guess: ");
    scanf("%c", userChar);
    if (isdigit(userChar))
    {
            userNum = userChar - '0';
            randNum = (rand() % 10);
            if (userNum == randNum)
            {
                    printf("Good guess! It was the random number.\n");
            }
            else
            {
                    printf("Sorry, the random number was %d.\n", randNum);
            }
    }
    else
    {
            printf("Sorry, you did not enter a digit between 0 and 9. Please try to run the program again.\$
    }
}

Когда я пытаюсь скомпилировать, я получаю следующую ошибку

week3work1.c: In function ‘main’:
week3work1.c:14:2: warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

Что на земле происходит? Я отчаянно нуждаюсь в помощи. Любая помощь на всех. Я серьезно собираюсь просто отказаться от этой программы. Почему он говорит, что ожидает аргумент 'char *', когда мой учебник показывает, что "% c" для обычного ole 'char'? Я использую nano, gcc и Ubuntu, если это что-то меняет.

Ответы [ 3 ]

14 голосов
/ 31 января 2012

Для scanf() вам нужно передать указатель на char, иначе у него не будет никакого способа сохранить символ, поскольку указанное char будет передано по значению.Поэтому вам нужно &userChar.

Допустим, userChar - это 0 до вызова.С вашим текущим кодом вы в основном делаете это (что касается утилиты):

scanf("%c", 0);

То, что вы хотите, это:

scanf("%c", some-location-to-put-a-char);

То есть &userChar.

Страница man для scanf упоминает это:

   c      Matches  a  sequence  of characters whose length is specified by
          the maximum field width (default 1); the next pointer must be  a
          pointer to char, and there must be enough room for all the char‐
          acters (no terminating null byte is added).  The usual  skip  of
          leading  white  space is suppressed.  To skip white space first,
          use an explicit space in the format.
1 голос
/ 31 января 2012

заменить scanf("%c", userChar); на scanf("%c", &userChar);.

0 голосов
/ 31 января 2012

Вам нужно передать указатель вместо значения символа.

scanf("%c",&userChar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...