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

C语言floodFill瓷砖计数代码printf无法输出问题求助

问题定位

代码无法运行到printf输出、运行异常的核心原因有4个:

  • 读取平面图字符时使用了错误的格式符%d:%d用于读取整数,而平面图存储的是#、.、S这类单字符,用%d读取会直接打乱输入流,甚至写入非法内存值导致程序崩溃。
  • 缺少bool类型对应的头文件:C语言原生不支持bool关键字,不引入头文件会直接编译失败,部分编译器隐式处理后会出现不可预知的运行错误。
  • 未处理输入残留换行导致读入内容错误:用scanf读取完N、M两个整数后,输入缓冲区会残留回车符,后续读字符时会直接把这个回车当成平面图内容读入,无法正确识别起点S的坐标。
  • 洪水填充逻辑漏处理起点S导致无限递归:当前逻辑只对.字符做已访问标记,遇到起点S时不会标记,递归过程会反复回到S点重复调用,最终栈溢出导致程序直接崩溃。
修复后可运行代码
#include<stdio.h>
#include<stdbool.h>  // 引入bool类型所需头文件

char image[1000][1000];
int row,col;
int tileCount = 0;

bool valid(int i,int j)
{
    if(i<0 || i>=row || j<0 || j>=col)
        return false;
    else
        return true;
}

void floodFill(int x, int y)
{
    if(valid(x,y) == false)           
        return;
    if(image[x][y] == '#')
        return;
    // 同时处理.和S两种可通行格子,统一标记为已访问
    if(image[x][y] == '.' || image[x][y] == 'S'){
        image[x][y] = '#'; 
        tileCount++;
    }                  
    floodFill(x-1,y);
    floodFill(x+1,y);
    floodFill(x,y-1);
    floodFill(x,y+1);
}

int main()
{
    int t;
    scanf("%d", &t);
    for(int i=1; i<=t; i++){
        tileCount = 0;
        int x, y; 
    
        scanf("%d %d", &row, &col);
        for(int k=0;k<row;k++)
        {
            for(int j=0;j<col;j++)
            {
                // %c前加空格自动跳过所有空白符(换行、空格),避免读入残留回车
                scanf(" %c", &image[k][j]);
                if(image[k][j] == 'S'){
                    x = k;
                    y = j;
                }
            }
           }
        
        floodFill(x,y);
        
        printf("Case #%d: %d\n", i, tileCount);
        
    }
    
    return 0;
}
修改点说明
  • 新增<stdbool.h>头文件,解决bool类型未定义的编译问题。
  • 将字符读取的格式符从%d修改为" %c",格式符前的空格会自动跳过输入流中的换行、空格等空白字符,无需手动调用getchar()吞换行,避免读入无效字符。
  • 调整floodFill的判断逻辑,遇到起点S时和普通瓷砖.一样标记为已访问(设置为#),彻底解决无限递归导致的栈溢出问题。
  • 移除了原代码每行读取后多余的getchar(),避免误吞有效输入字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:14:50