Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的浮点数组中的元素显示';如果数组较长,则不是数字事件?_C - Fatal编程技术网

C 为什么我的浮点数组中的元素显示';如果数组较长,则不是数字事件?

C 为什么我的浮点数组中的元素显示';如果数组较长,则不是数字事件?,c,C,当我创建应该包含5个元素的数组时,它显示索引为4的元素不是数字,为什么会发生这种情况?以下是我的部分代码: float yearsAvg[5]; printf("%f\n", yearsAvg[4]); // it's outputing -nan in the console 随机索引上的其他数组也会发生这种情况,我不知道为什么,有人能给我解释一下吗?使用未初始化的数组将包含一个垃圾值,使用它们将产生一些意想不到的结果。要修复它,只需初始化它: // Initializi

当我创建应该包含5个元素的数组时,它显示索引为4的元素不是数字,为什么会发生这种情况?以下是我的部分代码:

float yearsAvg[5];
printf("%f\n", yearsAvg[4]); // it's outputing -nan in the console

随机索引上的其他数组也会发生这种情况,我不知道为什么,有人能给我解释一下吗?

使用未初始化的数组将包含一个垃圾值,使用它们将产生一些意想不到的结果。要修复它,只需初始化它:

// Initializing each element of array with 0.0 value
float yearsAvg[5] = {0.0};
printf("%f\n", yearsAvg[4]);
继续看吧


注意:要对所有元素初始化
1.0
或其他内容,
{1.0}
将不再是实现您期望的有效语法。这里有两个选项:

1。在不同的数组元素中分配不同的值时:

int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];

for (int i = 0; i < 5; i++)
  my_array[i] = common_value;
2。或者,它们需要使用除零之外的公共值初始化:

int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];

for (int i = 0; i < 5; i++)
  my_array[i] = common_value;
int公共值=50;
int my_数组[5];
对于(int i=0;i<5;i++)
my_数组[i]=公共_值;

也注意,<代码> { 3.5 } /COD>这类初始化在C++中是有效的,即,可以用这种方式分配包括零的值。

使用未初始化的数组将包含一个垃圾值,使用它们会产生一些意想不到的结果。要修复它,只需初始化它:

// Initializing each element of array with 0.0 value
float yearsAvg[5] = {0.0};
printf("%f\n", yearsAvg[4]);
继续看吧


注意:要对所有元素初始化
1.0
或其他内容,
{1.0}
将不再是实现您期望的有效语法。这里有两个选项:

1。在不同的数组元素中分配不同的值时:

int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];

for (int i = 0; i < 5; i++)
  my_array[i] = common_value;
2。或者,它们需要使用除零之外的公共值初始化:

int my_array[3];
my_array[0] = 1;
my_array[1] = 5;
my_array[2] = 3;
int common_value = 50;
int my_array[5];

for (int i = 0; i < 5; i++)
  my_array[i] = common_value;
int公共值=50;
int my_数组[5];
对于(int i=0;i<5;i++)
my_数组[i]=公共_值;

也注意,<代码> { 3.5 } /COD>这类初始化在C++中是有效的,即,可以用这种方式赋值这些值,包括0。P>数组是指向一系列分配的内存地址的指针。

float yearsAvg[5];
分配5*(sizeof(float))[即5*4=20字节],指针指向第一个元素。现在,内存最初包含垃圾(随机)值,或者在您的情况下,
NULL
由控制台中的
-nan
表示

声明数组时,可以执行以下操作将所有值初始化为零

float yearsAvg[5] =  { };             // yearsAvg = [0, 0, 0, 0, 0]
int yearsAvg[5] =  { 0 };             // yearsAvg = [0, 0, 0, 0, 0]

数组是指向分配的一系列内存地址的指针

float yearsAvg[5];
分配5*(sizeof(float))[即5*4=20字节],指针指向第一个元素。现在,内存最初包含垃圾(随机)值,或者在您的情况下,
NULL
由控制台中的
-nan
表示

声明数组时,可以执行以下操作将所有值初始化为零

float yearsAvg[5] =  { };             // yearsAvg = [0, 0, 0, 0, 0]
int yearsAvg[5] =  { 0 };             // yearsAvg = [0, 0, 0, 0, 0]

数组未初始化,因此它可以包含任何有效或无效的数字。在gcc/clang上启用编译器警告、
-Wall-Wextra-pedantic
,或在VS上启用
/W3
(其他编译器的检查选项都将具有类似功能)数组未初始化,因此它可以包含任何有效或无效的数字。启用编译器警告,gcc/clang上的
-Wall-Wextra-pedantic
,或VS上的
/W3
(检查其他编译器的选项——所有编译器都将具有类似的选项),如果我只指定一个值,就像您在这里所做的那样,它会被分配给数组中的所有元素吗?如果我只想初始化第一个元素的值怎么办?@bartekw2213只需在下一行使用
yearsAvg[0]=0.0
,然后删除
={0.0}
。请参阅。@bartekw2213如果初始化数组的任何部分,那么它将初始化整个数组-这就是语言的工作方式。请记住,数组的其余部分是用0初始化的。So
float yearsAvg[5]={1}将为您提供一个数组,其中包含
{1,0,0,0}
@Kevin yes。但是,在C++的情况下,这是有效的,因为它支持这样的初始化。如果我只指定一个值,那么它会被分配给数组中的所有元素吗?如果我只想初始化第一个元素的值怎么办?@bartekw2213只需在下一行使用
yearsAvg[0]=0.0
,然后删除
={0.0}
。请参阅。@bartekw2213如果初始化数组的任何部分,那么它将初始化整个数组-这就是语言的工作方式。请记住,数组的其余部分是用0初始化的。So
float yearsAvg[5]={1}将为您提供一个数组,其中包含
{1,0,0,0}
@Kevin yes。但是,在C++的情况下,这是有效的,因为它支持这种初始化。