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

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;
}

修复说明

  1. 删掉了main函数里多余的},把所有逻辑放回函数内部。
  2. 把sscanf的格式符改成%d %d,直接读取整数值到int变量,不用再折腾ASCII码转换。
  3. 增加sscanf返回值判断,确保用户输入的是两个合法整数,避免格式错误导致的异常。
  4. 直接用整数范围判断0<=row<=2,逻辑更直观,不需要转ASCII码。
  5. 去掉了错误的atoi调用,因为已经直接拿到整数,无需再转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:20:41