没有显示数组

时间:2016-01-07 14:48:32

标签: c arrays

以下是我对SPOJ问题的实施:http://www.spoj.com/problems/FCTRL2/

#include <stdio.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int carry=0,k,i,j,num,arr[1000]={1};
        scanf("%d",&num);
        for(i=1;i<=num;i++)
        {
            for(j=0;j<=k;j++)
            {
                arr[j]=arr[j]*i+carry;
                carry=arr[j]/10;
                arr[j]=arr[j]%10;
            }
            while(carry)
            {
                k++;
                arr[k]=carry%10;
                carry/=10;
            }
        }
        for(i=k;i>=0;i--)//doubt
        {
            printf("%d",arr[i]);
        }
        printf("\n");
    }

    return 0;
}

我猜在反向显示数组时出错,但是当我改变条件时,即(i = 0; i <= k; i ++)它会打印数组。 请帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

int carry=0,k,i,j,num,arr[1000]={1};

for(j=0;j<=k;j++)

k未在此处初始化,并且具有不确定的值。

请参阅https://stackoverflow.com/a/6212973/5708620

  

默认情况下,外部和静态变量初始化为零   保证。自动和寄存器没有en的变量   显式初始化程序将具有不确定的值(或者是   未指定的值或陷阱表示。)

答案 1 :(得分:0)

是的,这取决于编译器和操作系统版本。一般情况下,我猜你的情况可能已被分配了垃圾值。