C语言递归打印数组代码可正常输入但无输出问题求助
问题分析
- 递归参数传递错误:
print函数第一个形参为数组(本质是指针),但调用时传入的a[i+1]是int类型的数组元素值,会被系统当作内存地址访问,属于非法内存访问,会直接触发程序崩溃。同时因为C语言标准输出默认是行缓冲,你的printf没有加换行符,程序崩溃后缓冲区内容没有刷新,所以看不到任何打印结果。正确传参应该传入下一个元素的地址a+1或&a[1]。 - 函数返回值逻辑错误:你声明
print返回值为int,但递归终止条件size==0的分支没有返回任何值,且print本身的功能是打印数组,不需要返回值,直接将返回值类型改为void即可,同时删除main函数中最后用printf打印print返回值的冗余代码。 - 打印格式不符合预期:打印单个元素时使用
"%d"没有加空格,最终输出的数字会直接拼接,和你预期的空格分隔效果不符。 - 冗余变量:
print函数内定义的int i=0完全冗余,每次递归都会重置i为0,直接访问a[0]即可。
修正后可运行代码
#include <stdio.h> void print(int a[], int size) { if (size != 0) { // 最后一个元素不加空格,避免末尾多余空格 if (size == 1) { printf("%d", a[0]); } else { printf("%d ", a[0]); } print(a + 1, size - 1); } } int main() { int a[100], size; printf("Enter array size: "); scanf("%d", &size); for (int i = 0; i < size; i++) { printf("Enter number u want to enter: "); scanf("%d", &a[i]); } print(a, size); return 0; }
运行效果验证
输入数组大小为3,依次输入元素5、4、2时,程序会直接输出5 4 2,符合预期要求。
内容的提问来源于stack exchange,提问作者Nadine Mohamed
相关产品推荐
相关产品推荐

