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

C语言三角形程序调用main无输出问题排查求助

问题分析与修复方案

咱们一步步拆解你代码里的问题,先解决最核心的无输出问题,再完善整体逻辑:

1. 主函数传参的低级错误

你在main里写的triangle(4, c);有问题——这里的c是未定义的标识符!如果是想传递字符'c',必须用单引号包裹成字符常量,改成triangle(4, 'c');,否则编译器要么报错,要么会把c当成未知变量处理,传参完全错误。

2. 导致无输出的核心逻辑错误

你的triangle函数开头的判断完全写反了:

if (width > 2){
    return;
}

当你传入width=4时,这个条件直接成立,函数立刻返回,后面的打印代码根本没机会执行!这就是为什么程序运行后啥都没有。你应该把判断改成过滤无效宽度,比如if (width <= 0) return;,或者如果是想限制最小宽度,写成if (width < 2) return;,绝对不能是大于2就返回。

3. 变量拼写失误

代码里的for(i = 0; i < widt...是width的拼写错误(少了一个h),这会导致编译失败,必须修正为width。

4. 完整修复后的代码(基于你的do-while思路)

假设你想实现的是「先递增到指定宽度,再递减」的三角形效果,修复后的完整代码如下:

#include <stdio.h> // 别忘了包含标准输入输出头文件,否则printf无法使用

void triangle(int width, char x); 

int main(void){
    triangle(4, 'c'); // 修正字符传参
    return 0; // 符合C标准的main函数返回值
} 

void triangle(int width, char x){
    // 过滤无效的宽度参数
    if (width <= 0){
        return;
    }
    int counter = 1;
    int direction = 1; // 1表示递增,-1表示递减
    
    do{
        // 打印当前行的字符
        int i;
        for(i = 0; i < counter; i++){
            printf("%c", x);
        }
        printf("\n"); // 每行结束换行
        
        // 切换方向或更新计数器
        if (counter == width){
            direction = -1; // 达到最大宽度后开始递减
        }
        counter += direction;
    } while(counter >= 1); // 直到计数器小于1时停止循环
}

测试输出结果

运行这段代码后,会得到你预期的三角形:

c
cc
ccc
cccc
ccc
cc
c

如果你的需求是只打印递增到指定宽度的三角形(比如到4个c就停止),可以去掉direction相关逻辑,直接用普通for循环实现即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:00:05