【问题标题】:C++ Array Input from File来自文件的 C++ 数组输入
【发布时间】:2014-04-29 00:32:19
【问题描述】:

下面的代码设计了两个输入两个独立的.txt文件。每个文件的每一行都有一个不同的整数。下面的代码读取文件,并将每个值存储在数组的索引中。输入效果很好,while 循环中的 cout 将正确的值打印到命令行。

然而问题在于 cout

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;

【问题讨论】:

  • 你是如何声明你的数组的?
  • 你是如何为你的数组分配内存的?
  • 术语:您的程序正在“填充”数组或为数组“赋值”。您发布的代码中没有setOnesetTwo 的声明。
  • 声明在顶部
  • 使用istream::good() 不是首选做法。使用某行while (fileOne &gt;&gt; number)

标签: c++ arrays


【解决方案1】:

嗯,我相信它应该打印出相当确定的值,在你的例子中,它总是 2。

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

其次,在 while 循环中,您会不断地用最后读取的值覆盖两个数组中的第一个元素,这会导致在执行结束时 setTwo[0] 中的值 2

第三,用表示大小的非常量变量初始化数组实际上在 C++ 中并不是标准的。

【讨论】:

  • 实际上在您发布之前就注意到了这一点。谢谢
【解决方案2】:

我建议你先阅读一个文件。

通常,从文件读取时不使用数组,因为文件长度会有所不同,但数组的长度是固定的。您在文件中的数据没有说明物品的数量。

因此,我将使用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 循环中读取两个文件有好处。如果一个失败而另一个没有,则会增加复杂性。一次读一读。

【讨论】:

  • 感谢您提供详细信息。这是一个需要最多 100 个数组的项目。否则我会使用向量甚至列表。整天都在工作,所以我的注意力没有集中,也没有忽略循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
相关资源
最近更新 更多