[英]Why does my C program print new blank lines when I try to print a string in the reverse order?
[英]why does my program print garbage values when i try using recursion?
我是编程新手,我正在学习递归,我正在从这个页面https://www.w3resource.com/c-programming-exercises/recursion/index.php做练习 4,我正在尝试打印一旦递归 function 中的“i”的值达到“n”的值,数组的元素,但是一旦我运行程序,它就会打印出我认为的垃圾值。我的问题是它为什么这样做? 为什么它不打印数组的值?
#include <stdio.h>
#include <stdlib.h>
void printr(int n,int i);
int main (void)
{
printf("NUMBER OF ELEMENTS:\n");
int n;
scanf("%i",&n);
printr(n,0);
}
void printr(int n,int i)
{
int arr[n];
if (i == n)
{
for (int j = 0; j < n; j++)
{
printf("%d",arr[j]);
return;
}
}
printf("element %d :\n",i+1);
int e;
//scan for input
scanf("%d",&e);
//populate array
arr[i]=e;
//do it again
printr(n,i + 1);
}
然后我通过在 printr function 中传递 mein function 作为参数中定义的数组来解决它,但我不明白为什么我的第一次尝试没有?
#include <stdio.h>
#include <stdlib.h>
void printr(int arr[],int n,int i);
int main (void)
{
printf("NUMBER OF ELEMENTS:\n");
int n;
scanf("%i",&n);
int arr[n];
printr(arr,n,0);
}
void printr(int arr[],int n,int i)
{
if (i == n)
{
for (int j = 0; j < n;j++)
{
printf("%d ",arr[j]);
}
printf("\n");
return;
}
printf("element %d :\n",i+1);
int e;
//scan for input
scanf("%d",&e);
//populate array
arr[i] = e;
//do it again
printr(arr,n,i + 1);
}
谢谢!
因为基本的 C:每次调用printr
在堆栈上都有自己的arr
,最初未初始化。 你打印它而不先初始化它。
当您打印出该值时,它不会首先被初始化。 创建要打印的变量时,它指向 memory 中的一个位置。 这个 memory 可能被另一个程序释放了(所以它可以抢夺)。 因此,它包含“垃圾”数据。 处理这个问题的方法是初始化你的值。
为了避免将来发生此类事情,请养成在不初始化它们时将指针设置为NULL
的习惯,这样当您尝试读取未初始化的值时程序会出现段错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.