来自文件的C ++数组输入

时间:2014-04-29 00:32:20

标签: c++ arrays

下面的代码设计了两个输入两个单独的.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;

2 个答案:

答案 0 :(得分:3)

嗯,我相信它应该打印出非常确定的价值观,在你的例子中,它始终是2.

您写的代码很糟糕,首先,您忘记初始化变量numbernumber2

其次,在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循环中读取两个文件是有好处的。如果一个失败但另一个失败,则会增加并发症。一次读一个。