【问题标题】:Read integers from text file and store them into an array从文本文件中读取整数并将它们存储到数组中
【发布时间】:2017-05-07 13:35:32
【问题描述】:

我对 C++ 非常陌生,并且从学校得到了这个作业,现在我被困住了,因为我无法让它工作,我们将不胜感激。提前致谢。

我有一个包含如下整数的文本文件:8 3 7 1 2 0

我需要创建一个程序来读取这些整数并将它们存储在一个数组中。程序检查文本文件并计算有多少整数,并相应地创建所需大小的数组,然后用文件中的整数填充该数组。我想出了这样的事情:

#include <iostream>
#include <fstream>
using namespace std;

int main(){

    ifstream File("data.txt");
    int count;
    File >> count;
    int array[count];
    for(int i=0; i<count; i++){
        File >> array[i];
    }

    cout<<"File contains: "<<count<<" integers";
    cout<<"Array of integers taken from the file: ";

    for(int i=0; i<count; i++){
        cout<<array[i];
    }
}

由于某些原因,我的 count 整数没有得到任何值,我已经检查过了,它在程序之后只是一个零,因此我的整个代码将无法工作。

【问题讨论】:

  • 使用File.is_open()查看是否打开文件成功。
  • 尝试检查每个I/O操作(打开,每个读操作)是否真的成功。还有int array[count],带有count 的变量不是有效的C++(如果你的编译器接受它,它是编译器特定的扩展)。此外,从您描述的示例中,该文件不包含要读取的后续整数的数量。
  • 了解其余的读取操作是否成功会很有帮助。

标签: c++


【解决方案1】:

如果提取失败,则将零写入 value 并设置 failbit。 如果提取导致 value 太大或太小而无法放入 value,则写入 std::numeric_limits&lt;T&gt;::max()std::numeric_limits&lt;T&gt;::min() 并设置了失败位标志。

这来自std::ifstreamoperator&gt;&gt; 的文档。如您所见,如果提取失败,则变量设置为0。为什么提取失败?好吧,你从不检查文件是否打开,所以有可能文件不存在,加载失败。

但即使您的文件加载正确,在我看来,文件中的第一个元素并不是其中的整数数量。如果不是,您将不得不读取每个整数,并将它们存储在动态数组中,因为您不知道大小(如 std::vector。)

【讨论】:

  • 哦,原来如此,那我得用向量了,可惜我还没研究过……
【解决方案2】:

C++ 中不存在可变长度数组。 使用vector&lt;int&gt; 来存储数据。

顺便说一句,你可以使用:

System("pwd");//linux

检查工作路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2015-01-22
    • 2021-12-08
    • 2014-08-14
    相关资源
    最近更新 更多