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

