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

为何C语言treeInput函数中的scanf语句被跳过?

问题分析与修复

你的代码存在几个关键错误,直接导致了scanf被跳过、功能失效的问题,逐一说明并修复:

  • 循环条件与变量初始化错误:while(x=0)是赋值操作而非判断逻辑,这会让循环直接不执行(赋值后x为0,while条件为假);同时变量x未初始化就使用,属于未定义行为。必须先初始化x为0,并将循环条件改为判断:int x = 0, tempRow, tempColm;、while(x == 0)

  • 逻辑判断错误:else if (temp == 'T'||'E')写法完全错误,'E'是字符常量(非0值),导致这个条件永远为真,不管temp是什么都会进入分支执行后续scanf,逻辑彻底混乱。正确写法是else if (temp == 'T' || temp == 'E')

  • scanf格式优化:" %c "末尾的空格会要求scanf持续读取直到遇到非空白字符,可能引发输入异常,改成" %c"(仅保留前面的空格跳过前导空白)更合理。

修复后的完整代码:

void treeInput(){
    char temp;
    int x = 0, tempRow, tempColm; // 初始化x为0
    while(x == 0){ // 使用判断而非赋值
        scanf(" %c", &temp); // 去掉末尾多余空格
        if(temp == 'Q'){
            x = 1;
        } else if(temp == 'A'){
            for(int i = 0; i < TEMP; i++){
                for(int j = 0; j < TEMP; j++){
                    forest[i][j] = 'T';
                }
            }
        } else if (temp == 'T' || temp == 'E'){ // 修正逻辑判断
            scanf("%d", &tempRow);
            scanf("%d", &tempColm);
            forest[tempRow][tempColm] = temp;
        }
    }
}

额外提示:如果输入数字后仍有残留换行符影响后续读取,可在读取数字的scanf后添加getchar()吃掉换行,但修复上述核心问题后,你的功能应该能正常运行。

内容的提问来源于stack exchange,提问作者Sarah Madden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:46:02