数组只打印零

时间:2015-05-23 12:31:10

标签: c arrays random printf format-specifiers

我创建了一个包含随机数的数组,但是当我打印数组时它们都是0,这里有什么问题?我知道有随机数,但仍然是零?

int superArray[SIZE];
int index, counter;

srand( time(0) );

for (index = 0; index < SIZE; index++)  //random numbers

    superArray[index] = rand() % 21  +1;

for (index = 0; index < SIZE; index++)  //vertical print
{
    printf("%8.f\n", superArray[index]);
}
printf("%8d\n\n", superArray[8]); //verify that array has random numbers

2 个答案:

答案 0 :(得分:5)

使用int打印%d,它将起作用:

printf("%d\n", superArray[index]);

答案 1 :(得分:3)

TL; DR; - 使用错误的格式说明符是未定义的行为。

引用C11标准,第7.21.6.1章,fprintf()

  

如果转换规范无效,则行为未定义。如果有任何论据   不是相应转换规范的正确类型,行为是   未定义。

superArray是一个int的数组。您应该使用%d格式说明符来打印值。

那就是说,

 printf("%8d\n\n", superArray[8]);

不会一个接一个地打印所有 8个元素,因为可能已经想到了。

即使您没有像上面那样思考,superarray[8] 可能无效,如果SIZE值小于9,因为C数组索引从0开始。