C语言程序中指定printf语句无法执行,求问题排查与解决
代码问题分析与修复方案
核心问题排查
- 语法致命错误:main函数里定义完
buffer后多了一个},导致后面所有代码都跑到了函数外面,程序根本不会执行这些逻辑——这就是你那行printf("%i %i", row,column)没反应的根本原因。 - 类型匹配完全错误:你把
row和column定义成int类型,却用%c格式符读取,这会把输入字符的ASCII码存进变量里,比如输入1,变量里存的是49,不是整数1。 - atoi用错了:atoi需要传字符串指针,你直接传int变量,属于类型不匹配,会触发未定义行为。
修复后的代码
#include <stdio.h> int main(void) { int row, column; char buffer[100]; printf("enter 2 values of row | column format \n"); fgets(buffer, 100, stdin); // 用%d读取整数,和int变量类型匹配 int read_result = sscanf(buffer, "%d %d", &row, &column); // 先确认成功读取两个整数 if (read_result == 2) { // 直接判断整数是否在0-2范围内 if ((row >= 0 && row <= 2) && (column >= 0 && column <= 2)) { printf("success\n"); printf("%i and %i", row, column); } else { printf("fail\n"); } } else { printf("fail: 请输入两个以空格分隔的整数\n"); } return 0; }
修复说明
- 删掉了main函数里多余的
},把所有逻辑放回函数内部。 - 把
sscanf的格式符改成%d %d,直接读取整数值到int变量,不用再折腾ASCII码转换。 - 增加
sscanf返回值判断,确保用户输入的是两个合法整数,避免格式错误导致的异常。 - 直接用整数范围判断
0<=row<=2,逻辑更直观,不需要转ASCII码。 - 去掉了错误的atoi调用,因为已经直接拿到整数,无需再转换。
内容的提问来源于stack exchange,提问作者superbo9y
相关产品推荐
相关产品推荐

