c++ - 如何检查文件是否仅包含整数?

标签 c++ qt file integer

在我的项目中,我需要上传一个文件,并检查文件中是否每行都有一个整数(正数或负数),以便可以在 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/

相关文章:

C# 从 C++ DLL 编码(marshal) Unsigned Char 返回值

c++ - 使用 vmime 构建电子邮件时出现乱码

c# - 如何计算包含多个分隔符的文件中存储的数字的出现次数?

c# - File.Open 的默认目录是什么?

c++ - 如何在文件 .cpp gtkmm 中声明小部件

c++ chrono给出负纪元时间

c++ - 更有效地使用 fork() 和写时复制内存共享

c++ - Qt 小部件之间的边距/间距

c++ - 为什么 QTableView 扩展选择会忽略我默认选择的行?

image - 如何在play scala项目中查看本地目录中的图像