为何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
相关产品推荐
相关产品推荐

