You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

井字棋程序Switch Case失效,输入坐标后无响应求助

井字棋程序输入后无响应的问题排查与修复

你的程序输入坐标后无响应,是几个关键语法和逻辑错误导致的,下面逐一说明并给出修复方案:

核心错误点

  • scanf参数错误:scanf("%lf",a);中,scanf需要接收变量的地址来存储输入值,直接传a会触发内存访问异常,导致程序卡死。必须改成scanf("%lf", &a);。
  • 字符初始化错误:char c1,c2,c3,c4,c5,c6,c7,c8,c9='';的空字符写法无效,且仅初始化了c9,其他字符变量为随机值。应统一初始化为空格:char c1=' ', c2=' ', c3=' ', c4=' ', c5=' ', c6=' ', c7=' ', c8=' ', c9=' ';。
  • printf格式符错误:打印单个字符时误用了%s(字符串格式符),需改用%c(字符格式符)。比如printf("| %c | %c | %c |\n", c1, c2, c3);,否则会把字符当作字符串指针,引发内存访问错误。
  • switch分支遗漏break:case 6后未加break;,导致输入6时会同时执行case7的代码,错误修改c7的值,需在case6后补充break;。

修复后的完整代码

#include <stdio.h> //Date:17/10/2022, By Raunak Shahi
int main(void)
{
    int i=0;
    int coord=0;
    // 初始化所有棋盘字符为空格
    char c1=' ', c2=' ', c3=' ', c4=' ', c5=' ', c6=' ', c7=' ', c8=' ', c9=' ';
    char input='';
    double a;
    printf("Here's the number assigned to each cell:\n"); //Showing the user the coordinates of each cell through the demo table
    printf(" ___________ \n");
    printf("| 1 | 2 | 3 |\n");
    printf("|___|___|___|\n");
    printf("| 4 | 5 | 6 |\n");
    printf("|___|___|___|\n");
    printf("| 7 | 8 | 9 |\n");
    printf("|___|___|___|\n");
    for(i=1;i<=9;i++){ //Printing the table each turn until the game is finished
        if(i%2==0){
            input='O';
            printf("Nought's turn, enter a coordinate:");
        }else{
            input='X'; 
            printf("Cross's turn, enter a coordinate:"); // 修正拼写错误 coorinate -> coordinate
        }
        // 传a的地址给scanf
        scanf("%lf", &a);
        coord=(int)a;
        switch(coord){
            case 1:
              c1=input;
              break;
            case 2:
              c2=input;
              break;
            case 3:
              c3=input;
              break;
            case 4:
              c4=input;
              break;
            case 5:
              c5=input;
              break;
            case 6:
              c6=input;
              break; // 添加break,避免执行case7
            case 7:
              c7=input;
              break;
            case 8:
              c8=input;
              break;
            case 9:
              c9=input;
              break;
             }
        printf(" ___________ \n");
        // 用%c打印单个字符
        printf("| %c | %c | %c |\n", c1, c2, c3);
        printf("|___|___|___|\n");
        printf("| %c | %c | %c |\n", c4, c5, c6);
        printf("|___|___|___|\n");
        printf("| %c | %c | %c |\n", c7, c8, c9);
        printf("|___|___|___|\n");
    }
    return 0;
}

另外顺便修正了提示文本里的拼写错误:coorinate改为coordinate。

内容的提问来源于stack exchange,提问作者Raunak Shahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:30:47