我在这个小代码中遇到了麻烦,这个代码使用结构变量获得两个玩家的昵称,姓名,年龄等.
问题是,当我打印两个玩家的信息时,我会得到一些随机字母和问号.
这是我的main.c
#include#include #include #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
到目前为止,我还没弄清楚为什么我没有预期的结果,我想我需要一些帮助.
在你的印刷案例中
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,并使用与扫描值相同的打印条件.就这样.