我正在开发一个程序,我必须在其中读取文本文件并将整数值存储在文本文件的数组中。我已经搜索了该怎么做并找到了这个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;
}
感谢您的帮助!
答案 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}}