下面的代码设计了两个输入两个单独的.txt文件。每个文件在每行上都有一个不同的整数。下面的代码读取文件,并将索引中的每个值存储在一个数组中。输入效果很好,而while循环中的cout会将正确的值打印到命令行。
然而问题是cout<< setTwo [0]<< ENDL;循环之外。它打印随机值,就像没有设置数组的索引一样。我完全糊涂了。
set2.txt
1
3
9
2
代码
int maxSize = 100;
int setOne[maxSize];
int setTwo[maxSize];
int setOneSize = 0;
int setTwoSize = 0;
//open files
ifstream fileOne ("set1.txt");
ifstream fileTwo ("set2.txt");
int number;
int number2;
fileOne >> number;
fileTwo >> number2;
//declare arrays
for(int i = 0; i < maxSize; i++) {
while (fileOne.good()) {
setOne[i] = number;
cout << "set 1 " << setOne[i] << endl;
fileOne >> number;
setOneSize += 1;
}
while (fileTwo.good()) {
setTwo[i] = number2;
cout << "set 2 " << setTwo[i] << endl;
fileTwo >> number2;
setTwoSize += 1;
}
}
cout << setTwo[0] << endl;
答案 0 :(得分:3)
嗯,我相信它应该打印出非常确定的价值观,在你的例子中,它始终是2.
您写的代码很糟糕,首先,您忘记初始化变量number
和number2
。
其次,在while循环中,您不断使用上一个读取值覆盖两个数组中的第一个元素,这会在执行结束时导致2
中的值setTwo[0]
。
第三,使用指示大小的非const变量初始化数组在c ++中实际上并不是标准的。
答案 1 :(得分:1)
我建议您先阅读一个文件。
通常,从文件读取时不使用数组,因为文件长度会有所不同,但数组的长度是固定的。您在文件中的数据未说明项目数量。
因此,我将使用std::vector
提供一个解决方案,然后使用数组。
std::vector<int> container1;
int number = 0;
while (fileOne >> number)
{
container1.push_back(number);
}
如果必须,请阅读数组。
同样,std::vector
是更安全的方法。
#define ARRAY_CAPACITY 100
int setOne[ARRAY_CAPACITY];
int index = 0;
int number = 0;
while ((fileTwo >> number) && (index < ARRAY_CAPACITY))
{
setTwo[index] = number;
++index;
}
在for
循环中读取两个文件是有好处的。如果一个失败但另一个失败,则会增加并发症。一次读一个。