微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我想反向打印一个数组,但它没有打印数组的所有元素

如何解决我想反向打印一个数组,但它没有打印数组的所有元素

 #include <stdio.h>

 int main()

 {
 int a,n,i;
 int arr[n];
// int arr[]={1,4,3,2};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
    scanf("%d",&arr[i]);
}
for(int i=n;i>=0;i--)
{
    printf("%d ",arr[i]);
}
}

感谢大家的帮助,但现在显示垃圾值的错误可能是什么。

解决方法

对于定义的数组

int arr[]={1,4,3,2};

在这个for循环中

for(int i=3;i>=arr[0];i--)

i 等于 0 不大于或等于 arr[0] 等于 1。因此,当 i>=arr[0] 等于 i 时,循环 0 的条件评估为逻辑假。

也许你的意思是下面的循环

for(int i=3;i >=0;i--)

请注意,使用 3 之类的幻数不是一个好主意。

您可以通过以下方式定义循环

for ( size_t i = sizeof( arr ) / sizeof( *arr ); i != 0; --i )
{
    printf( "%d ",arr[i - 1] );
}

for ( size_t i = sizeof( arr ) / sizeof( *arr ); i != 0; )
{
    printf( "%d ",arr[--i] );
}

同样在你的评论语句中,顺序错误

int a,n;
//int arr[n];
//scanf("%d",&n);

首先需要在变量 n 中读取一个正值,然后才能声明变长数组 arr

int a,n;
scanf("%d",&n);
int arr[n];

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    size_t n;

    if ( scanf( "%zu",&n ) == 1 && n != 0 )
    {
        int arr[n];

        for ( size_t i = 0; i < n; i++ ) 
        {
            scanf( "%d",arr + i );
        }

        for ( size_t i = 0; i < n; i++ )
        {
            printf( "%d ",arr[i] );
        }

        putchar( '\n' );

        for ( size_t i = n; i != 0; i-- )
        {
            printf( "%d ",arr[i-1] );
        }

        putchar( '\n' );
    }

    return 0;
}

如果输入以下值

5
1 2 3 4 5

那么程序输出将是

1 2 3 4 5 
5 4 3 2 1
,

由于 arr[0] 包含 1,您的代码将只打印 arr[3]、arr[2] 和 arr[1]。

,

您可以执行以下操作:

int main ()
{
  int a,n;
//int arr[n];
  int arr[] = { 1,2 };
//scanf("%d",&n);
  for (int i = sizeof (arr) / sizeof (arr[0]) - 1; i >= 0; i--)
    {
      printf ("%d ",arr[i]);
    }
}

sizeof 给出类型的大小(对于 c 中的 int 大小为 4) 所以你可以将它除以数组的任何一个元素 那么你的迭代器变量 i 的值也是动态的。

,

打印反向数组时需要将 for 循环中的条件调整为 i = n -1

,

您得到的是垃圾值,因为您的第二个 for 循环试图打印超出范围的 arr[n]。数组索引从 0 到 n-1,其中 n 是数组的大小。 Ref

这是更正后的代码。

#include <stdio.h>

int main()
{
 int a,n,i;
 int arr[n];
 // int arr[]={1,2};
 scanf("%d",&n);
 for(int i=0;i<n;i++)
 {
    scanf("%d",&arr[i]);
 }
 for(int i=n;i>0;i--)
 {
    printf("%d ",arr[i-1]);
 }
 return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。