C 无法知道分段错误的原因

C 无法知道分段错误的原因,c,C,我想做一个Tictatcoe游戏程序。它还没有完成,但可能有一些问题我无法解决 #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]='

我想做一个Tictatcoe游戏程序。它还没有完成,但可能有一些问题我无法解决

#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",&times);
    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(){
字符输入[3][3],播放器1[100],播放器2[100];
int i,j,k,次;

对于(j=0;j,我已经看到一些印刷品,这一行存在一些问题:

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]);

不应生成错误。

在第一个循环中,您仅分配
input[0][0]
。在“long”
printf
中,您还使用
%s
说明符打印
input[0][0]
。请首先修复所有编译器警告。我肯定您有一些警告。哦,我刚才只是通过放置
input[0][0]进行检查
当我出错时。这似乎是一个很好的时机。尤其是如何在调试器中运行程序,以便在崩溃发生时捕获崩溃,并能够在代码中找到崩溃发生的位置。T in代表微小。它很快,但最重要的是很小。这意味着它会有一些折衷,其中一个是它缺少相当大的安全性大型编译器会有很多诊断功能。非常感谢。