我正在尝试从我的函数'enter'复制数组获胜者,这样我就可以在'previous'函数上输出它。当选择前一个选项的选项时,我没有输出任何内容。它只是名为'previous'的最后一个函数无法正常工作,但产生问题需要大部分代码。
#include <stdio.h>
#include <string.h>
char enter(char names[][20]);
void menu();
void previous(char winner[][8]);
int main()
{
char names[16][20];
int i;
printf("Please enter the names of the players:\n");
/*Making the user enter 16 times*/
for (i = 0; i < 16; i++)
{
scanf("%9s", &names[i]);
fflush(stdin);
}
/*Clearing Screen*/
system("cls");
menu(names);
return names[16][20];
}
void menu(char names[][20], char winner[][8])
{
int choice;
printf("Please select one of the following options:\n\n"
"Press 1 to enter game results\n"
"Press 2 to display the current round\n"
"Press 3 to display the players advancing to the next round\n"
"Press 4 to display the previous round\n"
"Press 5 to exit the program\n");
scanf("%d", &choice);
if(choice == 1)
{
enter(names);
}
system("cls");
if(choice == 3)
{
previous(winner);
}
}
char enter(char names[][20])
{
int result;
int score1;
int score2;
int p, c, j, l, i;
char winner[8][8];
system("cls");
for(i = 0; i < 8; i++)
{
printf("\n\n%s vs %s",names[i],names[i+8]);
score1 = 0;
score2 = 0;
for(j = 0; j < 5; j++)
{
printf("\n\nEnter game %d results, press 1 if %s won or"
" 2 if %s won :\n",(j+1), names[i], names[i+8]);
scanf("%d", &result);
if(result == 1)
{
score1++;
}
if(result == 2)
{
score2++;
}
printf("\n\n1Current score is %d-%d", score1, score2);
if(score1 == 3)
{
printf("\n\n%s adavances to the next round!",names[i]);
strncpy(winner[i], names[i], 10);
printf("\n\nPress Enter to Continue");
getch();
system("cls");
break;
}
if(score2 == 3)
{
printf("\n\n%s adavances to the next round!",names[i+8]);
strncpy(winner[i], names[i+8], 10);
printf("\n\nPress Enter to Continue");
getch();
system("cls");
break;
}
}
}
system("cls");
printf("The players advancing to the next round are:\n\n");
for(p = 0; p < 8; p++)
{
for(c = 0; c < 8; c++)
{
printf("%c",winner[p][c]);
}
printf("\n");
}
printf("\n\nPress Enter to Continue");
getch();
system("cls");
menu(names, winner);
return winner[8][8];
}
void previous(char winner[][8])
{
int i, j;
for(i = 0; i < 8; i++)
{
for(j = 0; j < 8; j++)
{
printf("%c",winner[i][j]);
}
printf("\n");
}
}
答案 0 :(得分:1)
程序中没有数组winner
的数据!至少在你第一次打电话时没有。
菜单功能的签名是:
void menu(char names[][20], char winner[][8]);
但是你可以像这样从主叫它:
menu(names);
缺少winner
参数。这不应该发生,但是您已经为此函数声明了原型,即:
void menu();
不幸的是,C将空的parens视为“你传递的任何参数”,而不是不带参数的函数。这意味着您的函数调用滑过。修复方法是为原型提供正确的签名,并从winner
传递合适的main
数组。
奇怪的是,您的enter
函数提供了一个本地数组winner
。当您致电enter
时,此数组将始终为新数组。这可能不是你想要的。因此,您的程序应该有一个names
和一个winner
数组。 (你可以传递这些数组,但是你应该确保这些数组是一致的。当你真的想要对现有数组进行操作时,不要创建新的数组。)
您还可以递归地呼叫menu
。这意味着你会更深入地进入呼叫结构而没有真正的好处。不要这样做;改为使用循环:do
显示用户未选择“退出”的菜单while
。 (有递归函数的应用程序,但这不是一个。)