在我的项目中,我需要上传一个文件,并检查文件中是否每行都有一个整数(正数或负数),以便可以在 vector 中表示它。
由于我正在研究QT和C++,因此我考虑了两个建议,但是当我在文件中以逗号插入例如“35.2”的数字并按开始按钮时,程序都会崩溃。
是否有更好的解决方案来缓解该问题?我附上了我正在评估的解决方案之一。
QFile file_in(file_name);
file_in.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(&file_in);
int elem;
int pos = 0;
QString s;
QIntValidator valid(-999, 999, this);
while(!in.atEnd())
{
in >> elem;
s = QString::number(elem);
if(!valid.validate(s,pos))
{
v.clear();
QMessageBox msg(this);
msg.setText("Input non valido");
msg.exec();
return;
}
else
{
v.push_back(elem);
}
}
最佳答案
一种更简单的解决方案是逐行读取文件,并检查当前行是否可转换为整数。
Qt已经提供了许多方便的方法。例如,您可能会对 QByteArray::toInt()
感兴趣。
因此,解决方案可能是:
bool validate(const QString & file_name)
{
QFile in_f(file_name);
if(!in_f.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
bool is_valid = true;
while(is_valid && !in_f.atEnd())
{
QByteArray line = in_f.readLine();
line.toInt(&is_valid); // is_valid is set to false if the conversion failed
}
return is_valid;
}
这样就不会崩溃。如果每一行包含一个整数,则将返回
true
;否则,如果至少一行包含其他内容(字符串, double 数,...),则将返回false
。如此处实现的,如果文件为空,该函数将返回
true
。当然,如果您想返回false
,则可以为这种情况添加检查。
关于c++ - 如何检查文件是否仅包含整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60317131/