添加具有整数值的数组始终为“0”

时间:2018-04-10 05:53:14

标签: c++ arrays

我正在开发一个程序,我必须在其中读取文本文件并将整数值存储在文本文件的数组中。我已经搜索了该怎么做并找到了这个method。但结果并不像预期的那样。

例如,比方说,我在名为'integers.txt'的文本文件中有整数值,例如1,2,3,4,5,6,7,8,9,10。我正在读取这些值并使用名为“myarray”的新数组逐个添加它。但在执行添加后,使用while循环,我在'myarray'

中的输出只有零

这是我的代码:

int main(int argc, char **argv) 
{
  int myArray[2048]={0};
  int value;
  int i = 0;
  while(file >> value && i<sizeof(myArray))
 { 
   myArray[i] += value;
   i++;
   std::cout<<myArray[i]<<std::endl;
   std::cout<<value<<std::endl;
 }  

 std::cout<<i<<std::endl;

 std::cout<< sizeof(myArray)<<std::endl;
 return 0;
}

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

i过早递增。在印刷后进行。

while(file >> value && i<sizeof(myArray))
{ 
   myArray[i] += value;
   std::cout<<myArray[i]<<std::endl;
   std::cout<<value<<std::endl;

   i++; // ~~~~ Do it after the printing.
}

答案 1 :(得分:2)

在打印值之前,您正在递增i,并且最初所有数组元素都初始化为0。

因此,当我们到达文件的最后一个整数时,它会存储它并将i递增到一个超出范围的值。在打印语句之后增加i

答案 2 :(得分:0)

我相信输出与您的预期不同,因为您尝试将值添加到未设置的数组插槽中。尝试更改:

myArray[i] += value;

要:

myArray[i] = value;

答案 3 :(得分:0)

   myArray[i] += value;
   i++;
   std::cout<<myArray[i]<<std::endl;

您为myArray[i]分配了一个值,然后在使用它i之前增加myArray[i],这样您最终会在myArray而不是 myArray[i] += value; std::cout<<myArray[i]<<std::endl; i++; 中打印下一个值你修改过的那个。

交换最后两行可以解决这个问题:

2048

另请注意,如果您的文件包含的myarray个数字超过while(file >> value && i<sizeof(myArray)) ,您将访问while(file >> value && i < sizeof(myArray) / sizeof(myArray[0])) 以外的内存,并且您的程序可能会崩溃。所以不要这样:

{{1}}

做这样的事情:

{{1}}