我想制作一个井字棋游戏程序。尚未完成,但可能存在一些我无法解决的问题。
#include <stdio.h>
#include <string.h>
play(){
char input[3][3],player1[100],player2[100];
int i,j,k,times;
for (j=0;j<3;j++){
for (k=0;k<3;k++){
input[j][k]='_';
}
}
printf ("How many times do you want to play?\n");
scanf ("%d",×);
printf ("Enter the name of first player : \n");
scanf ("%s",player1);
printf ("Enter the name of second player : \n");
scanf ("%s",player2);
printf ("Who will enter first letter?" "\n\n1. %s" "\n1. %s" "\n\nEnter 1 or 2 : \n",player1,player2);
scanf ("%d",&i);
for (j=0;j<times;j++){
for (k=0;k<9;k++){
if (i==1){
if (k==0 || k%2==0){
printf("This is %s's chance.",player1);
}
if (k==1 || k%2==1){
printf("This is %s's chance.",player2);
}
}
if (i==2){
if (k==0 || k%2==0){
printf("This is %s's chance.",player2);
}
if (k==1 || k%2==1){
printf("This is %s's chance.",player1);
}
}
printf ("%s %s %s\n\n%s %s %s\n\n%s %s %s\n\n",input[0][0],input[0][1],input[0][2],input[1][0],input[1][1],input[1][2],input[2][0],input[2][1],input[2][2]);
}
}
}
int main(){
int i;
printf("Welcome to TicTacToe made by Saurabh.\n\n1. Play\n2. Help\n\nEnter 1 or 2 : ");
scanf("%d",&i);
switch (i){
case 1:
play();
break;
case 2:
break;
default:
printf ("Invalid response from user.");
}
}
在 play
函数中运行 scanf("%d",&i)
后,它显示段错误,但我不明白为什么会发生这种情况。提前致谢。
最佳答案
在一些打印中,我发现这一行存在一些问题:
printf ("%s %s %s\n\n%s %s %s\n\n%s %s %s\n\n",input[0][0],input[0][1],input[0][2],input[1][0],input[1][1],input[1][2],input[2][0],input[2][1],input[2][2]);
您定义了char input[3][3]
,因此input[0][0]
是一个单个字符(以及其他具有不同索引的字符),就像如果我定义 char my_str[10];
,my_str[0]
是单个字符。
我不知道这是否是你想要的,但改为:
printf ("%c %c %c\n\n%c %c %c\n\n%c %c %c\n\n",input[0][0],input[0][1],input[0][2],input[1][0],input[1][1],input[1][2],input[2][0],input[2][1],input[2][2]);
不应生成错误。
关于c - 无法知道段错误的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224304/