c - 无法知道段错误的原因

标签 c

我想制作一个井字棋游戏程序。尚未完成,但可能存在一些我无法解决的问题。

#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 函数中运行 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/

相关文章:

c - 读取包含奇数字符的 DAT 文件

c - 用线程模拟火车

c - 在什么情况下我可以在 C 中省略花括号?

c - qsort,比较中间值,为什么不能相等?

.net - 命令行 Windows 编译器 (cl.exe) 目标

c - .rodata 搬迁相关问题

c++ - 从守护进程运行 Linux 命令

c - 显示单链表的元素

c - 在带有文件描述符的 execl 中使用 grep

c - 如何从C中的最小堆中删除第一个元素?