警告:格式 '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);
不是摆脱挂起输入的正确方法。它实际上有未定义的行为。
%c
在 scanf()
转换规范中期望读取单个字符,而不是字符串。如果 nom
、prenom
和 personnage
的输入是单个单词,则可以使用 %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;
}
我是堆栈溢出的新手,我需要一些帮助,对不起,但我不明白问题出在哪里,有人可以帮助我吗?
我有消息:
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);
不是摆脱挂起输入的正确方法。它实际上有未定义的行为。%c
在scanf()
转换规范中期望读取单个字符,而不是字符串。如果nom
、prenom
和personnage
的输入是单个单词,则可以使用%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;
}