警告:格式 'c' 期望参数类型为 'int',但参数 2 的类型为 'char '

warning :format 'c' expects argument of type 'int', but argument 2 has type 'char '

我是堆栈溢出的新手,我需要一些帮助,对不起,但我不明白问题出在哪里,有人可以帮助我吗?

我有消息:

warning: format 'c' expects argument of type 'int', but argument 2 has type 'char '

不知道怎么解决

代码:

typedef struct Ajouter_un_joueur Joueurdef;
struct Ajouter_un_joueur {
    char nom_joueur[30];
    char prenom_joueur[20];
    unsigned int numero_joueur;
    char personnage[50];
};

int main() {
    Joueurdef joueur;
    
    printf("Choisir le nom de votre joueur \n");
    
    fflush(stdin);
    scanf("%c", joueur.nom_joueur);
    
    printf("Choisir le prenom de votre joueur \n");
    
    fflush(stdin);
    scanf("%c", joueur.prenom_joueur);
    
    printf("Choisir un numero unique pour votre joueur \n");
    
    fflush(stdin);
    scanf("%u", &joueur.numero_joueur);
    
    printf("Choisir le nom de votre personnage\n");
    
    fflush(stdin);
    scanf("%c", joueur.personnage);
    
    printf("Vous etes %c %c, votre numero est le %u et votre personnage est %c", 
           joueur.prenom_joueur, joueur.nom_joueur, joueur.numero_joueur,
           joueur.personnage);
}

您的代码中存在多个问题:

  • fflush(stdin); 不是摆脱挂起输入的正确方法。它实际上有未定义的行为。

  • %cscanf() 转换规范中期望​​读取单个字符,而不是字符串。如果 nomprenompersonnage 的输入是单个单词,则可以使用 %s 而不是 %c。如果允许白色 space,则使用 %[^\n] 读取字符直到行尾。格式字符串中的初始 space 将跳过挂起的换行符和初始白色 space.

  • 输出printf中的字符串,使用%s代替%c。错误消息有点误导,最后可能有一个星号 *warning: format 'c' expects argument of type 'int', but argument 2 has type 'char *'

这是修改后的版本:

#include <stdio.h>

typedef struct Ajouter_un_joueur Joueurdef;
struct Ajouter_un_joueur {
    char nom_joueur[30];
    char prenom_joueur[20];
    unsigned int numero_joueur;
    char personnage[50];
};

int main() {
    Joueurdef joueur = { 0 };
    
    printf("Choisir le nom de votre joueur \n");
    scanf(" %29[^\n]", joueur.nom_joueur);
    
    printf("Choisir le prenom de votre joueur \n");
    scanf(" %19[^\n]", joueur.prenom_joueur);
    
    printf("Choisir un numero unique pour votre joueur \n");
    scanf("%u", &joueur.numero_joueur);
    
    printf("Choisir le nom de votre personnage\n");
    scanf(" %49[^\n]", joueur.personnage);
    
    printf("Vous etes %s %s, votre numero est le %u et votre personnage est %s\n", 
           joueur.prenom_joueur, joueur.nom_joueur, joueur.numero_joueur,
           joueur.personnage);
    return 0;
}