如何打印结构变量持有的char数组?

时间:2015-12-24 14:51:17

标签: c printf

我在使用结构变量获得两个玩家昵称,姓名,年龄等的小代码时遇到了麻烦。

问题在于,当我打印两个玩家的信息时,我会得到一些随机字母和问号。

这是我的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

到目前为止,我还没弄清楚为什么我没有达到预期的结果,我想我需要一些帮助。

2 个答案:

答案 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);