【问题标题】:No display of array不显示数组
【发布时间】:2016-04-12 00:21:39
【问题描述】:

以下是我对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;
}

我想在反向显示数组时有一个错误,但是当我更改条件时,即 for(i=0;i

【问题讨论】:

  • j&lt;=k : k 未初始化。
  • 你在哪里初始化k?由于您从不这样做,因此它的值将是 indeterminate 并且使用它会导致 未定义的行为

标签: c arrays


【解决方案1】:
int carry=0,k,i,j,num,arr[1000]={1};

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

k在这里没有初始化,会有一个不确定的值。

https://stackoverflow.com/a/6212973/5708620

外部和静态变量默认初始化为零,这 得到保证。没有 en 的自动和寄存器变量 显式初始化器将有一个不确定的值(要么 未指定的值或陷阱表示)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多