【问题标题】:Input Numbers from txt file to array从txt文件输入数字到数组
【发布时间】:2014-02-19 21:16:42
【问题描述】:

我很确定这是一个常见问题,但我找不到与我类似的示例,所以.. 我有一个名为 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;
}

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

【问题讨论】:

    标签: c++ arrays text fstream


    【解决方案1】:

    声明行变量

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

    适当的加载数据:

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

    【讨论】:

    • 加载数据是什么意思?
    • 将数据从输入文件加载到双精度数组(while (!myfile.eof() ) { ... }) 之间的代码块
    • 谢谢!这最有效,除了它似乎只对第一个数字做而且我无法让循​​环工作,似乎我只是在乘以错误:P
    【解决方案2】:

    这里的变量行

    cout << PA[line]<< endl;
    

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

    整个 while 块看起来很可疑:

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

    你确定 getline 调用吗?

    我知道一个带有这个签名的 getline:

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

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

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

    【讨论】:

      【解决方案3】:

      你需要声明你称为'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,不应该硬编码,顺便说一句)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-29
        • 2017-01-30
        • 2018-08-11
        • 1970-01-01
        相关资源
        最近更新 更多