GCC erreur de compilation: format ‘%c’ attend argument de type ‘char *’, mais l'argument 2 est de type ‘int’ [-Wformat]

Ok, je suis un noob avec le C, mais je pense que le code est basique et simple. Ce programme est un collège d'affectation, et est censé pour avoir le 'appel isdigit()' la fonction en elle. Voici le code

//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.$
    }
}

Lorsque j'essaie de compiler, j'obtiens l'erreur suivante

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

Ce qui sur terre se passe? Je suis désespérée pour obtenir de l'aide. Un peu d'aide. Je suis sérieux au sujet de donner à ce programme. Pourquoi est-ce qu'il dit qu'il s'attend argument de 'char *' quand mon manuel montre que "%c" est régulièrement ole 'char'? Je suis à l'aide de nano, gcc, et Ubuntu si cela fait une différence.

  • gcc produit de multiples mises en garde pour votre programme. Vous devez corriger toutes les. Par exemple, vous êtes absent #include <stdlib.h> (nécessaire pour srand() et rand()) et #include <time.h> (nécessaire pour clock()).
  • Lors de la compilation, je n'ai plus d'erreurs, et le programme fonctionne maintenant comme je le voulais. Donc, je crois que je me demande si elle va continuer à travailler? Parce que dans mon livre, le seul préprocesseur instruction nécessaire est '#include <stdio.h>' et le '#include <ctype.h>' est pour l'appel isdigit() fonction.
  • Vous devez les en-têtes que j'ai décrit ci-dessus si vous allez appeler ces fonctions. Il y a des circonstances dans lesquelles vous pouvez vous en sortir sans les utiliser, mais je n'entrerai pas dans les détails, il suffit d'ajouter le #include directives. gcc mettra en garde contre les appels de fonction si vous utilisez -std=c99 -pedantic. Ce manuel vous aide? Si elle montre un exemple qui appelle rand() sans #include <stdlib.h>, ou que les appels clock() sans #include <time.h>, votre livre est mauvais.
  • Le livre qui m'a donné est "Programmation en C pour le débutant absolu, 2e Édition" par Michael A. de la Vigne. J'ai remarqué que certains des exercices à la fin de chaque chapitre ont à voir avec les sujets avancés qui n'ont même pas proche d'être discuté. Par exemple, à la fin de la 2e chapitre (sur les principaux types de données) un exercice était de créer un programme qui utilise scanf() pour permettre à un utilisateur de saisir son nom. Ce qui serait une chaîne, et le chapitre avait à peine couverte de caractères, sans parler des chaînes de caractères.
  • Je l'ai mentionné avant: printf et scanf formats ne sont pas les mêmes. Pour printf, %c nécessite un argument de type int, ce qui devrait être une valeur de caractère. Pour scanf, %c nécessite un pointeur vers char. Assurez-vous que vous êtes en train de lire la documentation de la fonction que vous utilisez.
InformationsquelleAutor Nyxm | 2012-01-30