C++ QTextStream::readLine():返回值无效
我正在尝试使用以下代码读取文件:C++ QTextStream::readLine():返回值无效,c++,qt,qfile,qtcore,C++,Qt,Qfile,Qtcore,我正在尝试使用以下代码读取文件: const char *imageFile = repertoire_Hu.filePath(img_files_Hu[i]).toStdString().c_str(); QFile f(imageFile); QTextStream out(&f); float tab2[7]; int q = 0; if(f.open(QIODevice::ReadOnly | QIODevice::Text)) { while(!out.atEnd())
const char *imageFile = repertoire_Hu.filePath(img_files_Hu[i]).toStdString().c_str();
QFile f(imageFile);
QTextStream out(&f);
float tab2[7];
int q = 0;
if(f.open(QIODevice::ReadOnly | QIODevice::Text))
{
while(!out.atEnd())
{
QString line = out.readLine();
tab2[q] = line.toFloat();
q ++;
}
}
f.close();
这是我文件的内容
-1557.35
0.659662
-2.65505
5.43287e-23
5.4945e-34
-5.65088e-35
-1.35751e+38
-1557.35
0.659662
-2.65505
5.43287e-23
5.4945e-34
-5.65088e-35
-1.35751e+38
但是,当我在读取文件后绘制值时,我得到了错误的值(与比较文件中的值完全不同),有时文件无法打开,并且大多数情况下它不会读取文件中的所有值
我想我在某个地方做错了什么,但我想不出来。我没有发现任何立即出错的地方,所以您需要进行更多的调试。这将帮助您找到问题:
while(!out.atEnd())
{
QString line = out.readLine();
bool ok = false;
qDebug() << "Line index" << q << "contents:" << line;
float value = line.toFloat(&ok);
if (ok) {
qDebug() << "Parsing succeeded:" << tab2[q];
tab2[q] = value;
++q;
} else {
qDebug() << "Parsing failed, skipping line!";
// or break, or whatever you want to do
}
}
while(!out.atEnd())
{
QString line=out.readLine();
bool ok=false;
qDebug()确保行与行之间没有空行,行的末尾也没有未清除的空格。从数据文件复制/粘贴后,似乎所有这些都已存在
这对我来说非常好:
data.txt
main.cpp
看起来您的文件包含空行,我计算了您要放入7元素数组的总共14行。您是否以某种方式处理了它们?现在是否已解决?是的,它已解决。再次使用Thx。@user3082499:然后请选择一个答案!编辑后的解决方案将跳过解析失败的行,这可能是您真正想要的。Thx为了帮助Laszlo和Hyde。我在调试后解决了这个问题。我不知道为什么,但我在7.thx上读取了4个值again@user3082499:没关系,但别忘了选择答案。
-1557.35
0.659662
-2.65505
5.43287e-23
5.4945e-34
-5.65088e-35
-1.35751e+38
#include <QtCore/QFile>
#include <QtCore/QTextStream>
#include <QtCore/QString>
#include <QtCore/QDebug>
int main()
{
QFile f("data.txt");
QTextStream out(&f);
float tab2[7];
int q = 0;
if(f.open(QIODevice::ReadOnly | QIODevice::Text))
{
while(!out.atEnd())
{
QString line = out.readLine();
tab2[q] = line.toFloat();
qDebug() << "LINE:" << tab2[q];
q ++;
}
}
f.close();
return 0;
}
g++ -Wall -fPIC -I/usr/include/qt/QtCore -I/usr/include -I/usr/include/qt -lQt5Core main.cpp && ./a.out
LINE: "-1557.35" LINE: "0.659662"
LINE: "-2.65505"
LINE: "5.43287e-23"
LINE: "5.4945e-34"
LINE: "-5.65088e-35"
LINE: "-1.35751e+38"