#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:
答案 0 :(得分:0)
问题是你要复制到R2Name [i],但每次迭代我都会增加2,所以只有R2Name [0],R2Name [2]等被填写。 m每次只增加1,所以你可以改为复制到R2Name [m]来解决这个问题。