我很确定这是一个常见的问题,但我找不到类似于我的例子,所以...... 我有一个名为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;
}
到目前为止,我的问题是我一直收到错误:未声明行。我想稍后使用浮点数来计算新数据。我想我做错了..有什么帮助吗?谢谢!
答案 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,不应该硬编码,顺便说一下)。
另请注意,如果文件访问失败,则不应打印结果。