从文本文件到数组的输入数字

时间:2014-02-19 21:16:42

标签: c++ arrays text fstream

我很确定这是一个常见的问题,但我找不到类似于我的例子,所以...... 我有一个名为input.txt的文本文件,其中包含:0.0001234 1.0005434 0.0005678 1.0023423 0.00063452 1.0001546 0.00074321 1.00017654。 现在我想写一个程序将其读入一个数组,然后快速检查它是否有效。到目前为止,我已经:

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

int main ()
{
    double PA[8];
    int n;
    ifstream myfile ("input.txt");
    if (myfile.is_open())
    {
        while (! myfile.eof() )
        {
            getline (myfile,line);
            cout << PA[line]<< endl;

        }
        myfile.close();
    }
    else cout << "Unable to open file";
    for (n=0; n<8; n++) // to print the array, to check my work
    {
         cout << " {" << PA[n] << "} ";
}

    system("PAUSE");
    return 0;
}

到目前为止,我的问题是我一直收到错误:未声明行。我想稍后使用浮点数来计算新数据。我想我做错了..有什么帮助吗?谢谢!

3 个答案:

答案 0 :(得分:0)

声明行变量

int n, line = 0;
std::string value;

正确的加载数据:

getline (myfile,value);
PA[line] = atof(value.c_str());
cout << PA[line]<< endl;
line++;

答案 1 :(得分:0)

此处的变量行

cout << PA[line]<< endl;

未声明。如果你声明它,你也必须给它一个值,否则它是未定义的,PA[line]是未定义的,换句话说:会崩溃。

整个区块看起来很可疑:

while (! myfile.eof() )
{
    getline (myfile,line);
    cout << PA[line]<< endl;

}

你确定要打电话吗?

我知道有这个签名的getline:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

,这甚至不匹配您的版本中的参数数量。

如果您的输入文件在输入上有超过8行,则while循环将具有多个交互 - 并且您的数组只有8个元素的空间。

答案 2 :(得分:0)

您需要声明名为'line'的变量,如下所示:

   int i=0;

   while (! myfile.eof() && i<8)
    {
        std::string line; // this was the missing statement

        getline (myfile,line);

        double value = atof(line.c_str()); // convert line form char* to double

        PA[i++] = value;

        cout << value << endl;

    }

请注意,您需要将line转换为double并使用增量变量'i'(例如,正如我所做的那样。确保不会通过再次检查i的大小来溢出PA容量(当前为8,不应该硬编码,顺便说一下)。

另请注意,如果文件访问失败,则不应打印结果。