【问题标题】:Array prints just zeros数组只打印零
【发布时间】:2015-05-23 12:31:09
【问题描述】:

我创建了一个带有随机数的数组,但是当我打印数组时它们都是 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

【问题讨论】:

  • 并且printf("%8d\n\n", superArray[8]); 不会水平打印数组。请改用for (index = 0; index &lt; SIZE; index++){ printf("%d ", superArray[index]); }
  • 你的程序有未定义的行为;阅读printf的手册。
  • 如果你在编译时启用了警告(对于 gcc,至少 '-Wall -Wextra -pedantic' 那么你的编译器会标记:1)第一个 printf() 语句为格式修饰符与参数类型不匹配。 2)time()的参数是指针类型,所以0不正确,使用NULL。顺便说一句:询问运行时问题时,请发布可编译的代码。发布的代码没有。它缺少#include 语句和包含代码的函数。

标签: c arrays random printf format-specifiers


【解决方案1】:

%d 打印int 就可以了:

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

【讨论】:

    【解决方案2】:

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

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

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

    superArrayints 的数组。您应该使用%d 格式说明符来打印值。

    也就是说,

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

    不会像您可能所想的那样,一个接一个地打印 所有 8 个元素。

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

    【讨论】:

    • 是的,这是错误,我的数组是 SIZE = 20 :o) 我打印了数组 8 以查看数组是否真的像其他打印命令所建议的那样为空,这只是一个测试跨度>
    • @AndersBruun 正如我所说,SIZE 超过 9 个就可以了,但它不会打印所有元素,在这种情况下它只会打印第 9 个元素。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2023-04-08
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多