【问题标题】:warning :format 'c' expects argument of type 'int', but argument 2 has type 'char '警告:格式“c”需要“int”类型的参数,但参数 2 的类型为“char”
【发布时间】:2021-01-06 20:10:32
【问题描述】:

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

我有消息:

警告:格式“c”需要“int”类型的参数,但参数 2 有 输入“字符”

我不知道如何解决。

代码:

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);
}

【问题讨论】:

    标签: c format warnings


    【解决方案1】:

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

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

    • scanf() 转换规范中的%c 期望读取单个字符,而不是字符串。如果nomprenompersonnage 的输入是单个单词,则可以使用%s 代替%c。如果允许空格,请使用%[^\n] 读取字符直到行尾。格式字符串中的初始空格将跳过待处理的换行符和初始空格。

    • 要在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;
    }
    

    【讨论】:

    • 感谢您的帮助,程序现在运行良好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2019-04-03
    • 2018-11-03
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多