【问题标题】:How to put values from a file into an array如何将文件中的值放入数组
【发布时间】:2019-04-11 05:33:57
【问题描述】:

所以我一直在研究这个程序,它应该对数组中的数字进行一些操作。但这些操作不是问题。问题是我似乎无法理解如何将输入文件中的 4 个数字放入数组中。

当我使用带有数组和索引 2 的输出语句检查它时,它输出零。而不是数字 4。

所有 numbers.txt 文件将包括:2 4 3 5

#include <iostream> //cin, cout, endl
#include <iomanip>  //manipulators such as setw, setprecision
#include <fstream>  //File I/O
#include <cmath>    //math operators like pow
#include <string>   //string
#include <cassert>  //function assert

using namespace std;
typedef unsigned int uint;
const string fileName = "numbers.txt";


int main()
{
    uint arrayWithNumbers[100];
    uint currentNumber = 0;
    uint limiter = 0;
    ifstream inData;
    inData.open(fileName);

    if(inData)
    {
        while(inData >> currentNumber)
        {
            arrayWithNumbers[limiter] = currentNumber;
            limiter++;
        }//while for array processing
    }//if check for file

    inData.close();
    cout << arrayWithNumbers[2] << endl;

}//main

【问题讨论】:

  • 理论上,它会输出 3,因为数组是从零开始的。
  • 如果您在调试器中逐行执行代码,它的行为是否符合您的预期?它是否读取文件中应包含的值?
  • 你的.txt-文件是什么样的?
  • 哎呀,我在数字之间有逗号,然后我把它们拿出来,它起作用了。多谢,伙计。为什么逗号会这样停止输入?或者当您以这种方式输出时,逗号是否等于零?
  • 当您执行inData &gt;&gt; currentNumber 时,代码会尝试读取无符号整数(currentNumber 的类型)并且仅 读取无符号整数。如果输入中有任何字符无法解析为无符号整数(例如逗号),则输入将失败。这将导致循环结束,并且您打印数组的 uninitialized 元素,一个未初始化的元素,其值为 indeterminate 并且当您打印它时,您将拥有 undefined行为.

标签: c++


【解决方案1】:

当您将读取操作inData &gt;&gt; currentNumber 限制为uint 的类型时,它将无法读取char。逗号是char。这将导致 loop 结束。

你很幸运,输出显示0。您访问未初始化的内存,我强烈建议您不要这样做。

uint arrayWithNumbers[100] = {0};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2013-03-14
    • 1970-01-01
    • 2019-03-30
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多