我在使用结构变量获得两个玩家昵称,姓名,年龄等的小代码时遇到了麻烦。
问题在于,当我打印两个玩家的信息时,我会得到一些随机字母和问号。
这是我的main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
int main()
{
Player joueur[2];
int i = 0;
do
{
printf("Nickname : ");
scanf("%16s", joueur[i].nickname);
printf("Last Name : ");
scanf("%41s", joueur[i].lastName);
printf("First Name : ");
scanf("%41s", joueur[i].firstName);
printf("Your age : ");
scanf("%d", &joueur[i].age);
printf("\n");
i++;
}while (i < 2);
int p = 1;
do
{
printf("============== Joueur %d =============\n", p);
printf("Nickname : %s\n", joueur[i].nickname);
printf("Name : %s %s\n", joueur[i].lastName, joueur[i].firstName);
printf("Age : %d\n\n", joueur[i].age);
p++;
}while (p < i + 1);
return (0);
}
我使用的main.h:
#ifndef MAIN_H
#define MAIN_H
typedef struct Player Player;
struct Player
{
char nickname[17];
char firstName[42];
char lastName[42];
int age;
};
#endif
到目前为止,我还没弄清楚为什么我没有达到预期的结果,我想我需要一些帮助。
答案 0 :(得分:7)
在您的印刷案例中,
printf("Nickname : %s\n", joueur[i].nickname);
printf("Name : %s %s\n", joueur[i].lastName, joueur[i].firstName);
printf("Age : %d\n\n", joueur[i].age);
i
值从2开始,这超出了界限。
另外,我根本没有达到使用p
的目的。
解决方案:扫描完成后,只需将i
重置为0,并使用与扫描值相同的打印条件。这就是全部。
答案 1 :(得分:-2)
如果我记得我的C直...你需要在你的scanf中有一个&符号用于字符串......
scanf("%16s", &joueur[i].nickname);
scanf("%41s", &joueur[i].lastname);
scanf("%41s", &joueur[i].firstname);