在C中使用strcpy

时间:2014-11-19 02:01:23

标签: c strcpy

好吧,所以基本上我一直在用16名球员的比赛形式编写一个程序。我目前正在使用循环编写第一轮的代码,然后尝试将每个匹配的获胜者发送到一个名为R2CONTESTANTS的新数组。但是,当我打印R2CONTESTANTS数组中的所有内容时,它只存储一半的字符串和每个其他元素的半个随机字符([1],[3]。任何帮助都会受到赞赏,被卡住几个小时。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define CONTESTANTS 16
#define R2CONTESTANTS 8
#define MATCHNO 8

//Forward Declarations
int R1(char Name [][20]);

int main(void)
{
  GetNames();
  int R1(char Name[][20]);
  return 0;
}

int GetNames(void)
{
  char Name[CONTESTANTS][20];
  int n;


  printf("Hello and Welcome to the 2014 Tennis Knockout Competition!\n");
  printf("Please enter the names of all 16 players (MAX 20 CHARACTERS): \n");

/*Get Names loop*/
  for(n = 0; n < CONTESTANTS ; n++)
    {
      printf("%d >>", n+1);
      scanf("%20s", Name[n]);
      fflush(stdin); 
    }
  R1(Name);
}

int R1(char Name[][20])
{
  int m/*match counter*/, i=0/*PLAYER COUNT*/, n/*TEST*/ ;
  int WinNO;
  char R2Name[R2CONTESTANTS][20];

  printf("Welcome to Round 1!\n");

  for( m = 0 ; m < MATCHNO ; m++, i+=2 ) //PER MATCH
    {
      printf("\nMatch %d of %d.\n", m+1, MATCHNO);
      printf("\n1.   %s   v   2.   %s\n", Name[i], Name[i+1]);
      printf("\nPlease enter number of winner: ");
      scanf("%d", &WinNO);
       /*WINNER/LOSER*/
      switch(WinNO)//STRCPY is sending too many elements to R2CONTESTANTS array.
        {
          case 1:
          strcpy(R2Name[i], Name[i]);
          //printf("%s is sent through to the next round.\n", Name[i]);
          break;
          case 2:
          strcpy(R2Name[i], Name[i+1]);
          //printf("%s is sent through to the next round.\n", Name[i+1]);
          break;
          default: 
          printf("something went wrong\n"); //IMPROVE
          break;
      }


     }
  //TEST
  for(n = 0 ; n < R2CONTESTANTS ; n++)
  {
      printf("Winner %d: %s\n", n+1, R2Name[n]);
  }
}

这是R2CONTESTANTS中的内容:

获胜者1:a 获胜者2:
获胜者3:c
获胜者4:
获胜者5:e
获胜者6:
获胜者7:g
获胜者8:

1 个答案:

答案 0 :(得分:0)

问题是你要复制到R2Name [i],但每次迭代我都会增加2,所以只有R2Name [0],R2Name [2]等被填写。 m每次只增加1,所以你可以改为复制到R2Name [m]来解决这个问题。