【问题标题】:the use of strcpy in CC语言中strcpy的使用
【发布时间】:2014-11-19 02:01:23
【问题描述】:

好的,所以基本上我一直在编写一个由 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:…

【问题讨论】:

  • 尝试编译带有完整警告-Wall -Werror -pedantic,你会发现一些错误。
  • strcpy(R2Name[X], Name[Y]); X 和 Y 必须分开管理。

标签: c strcpy


【解决方案1】:

问题是您正在复制到 R2Name[i] 但 i 每次迭代都会递增 2,因此只有 R2Name[0]、R2Name[2] 等会被填写。 m 每次仅增加 1,因此您可以改为复制到 R2Name[m],这应该可以解决问题。

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 1970-01-01
    • 2016-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多