首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查QTextStream::operator>>是否失败

检查QTextStream::operator>>是否失败
EN

Stack Overflow用户
提问于 2012-11-29 18:14:32
回答 2查看 1.5K关注 0票数 3

sscanf这样的函数返回成功读取的项目数,这对于错误检查很有用,例如,下面的代码将打印"failed“,因为sscanf将返回3(读取了1、2、3,但"text”不是数字)。

QTextStream是否提供了一种等价的错误检查方法?

代码语言:javascript
复制
const char *text = "1 2 3 text";
int a, b, c, d;
if (4 != sscanf(text, "%d %d %d %d", &a, &b, &c, &d))
    printf("failed");
QString text2 = text;
QTextStream stream(&text2);
stream >> a >> b >> c >> d; // how do I know that d could not be assigned?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-29 18:16:00

您可以通过调用stream.status()查询读取后的stream's status

代码语言:javascript
复制
if (stream.status() == QTextStream::Ok) 
{
    // succeeded
} 
else
{
    // failed
}
票数 7
EN

Stack Overflow用户

发布于 2014-01-07 02:02:47

无论如何,sscanf检查可能还不够:-(

在很多情况下,开发人员会想要寻找更多的错误,比如溢出等。

代码语言:javascript
复制
const char *text = "1 2 3 9999999999";
int a, b, c, d;
if (4 != sscanf(text, "%d %d %d %d", &a, &b, &c, &d))
    printf("failed");
printf("Numbers: %d %d %d %d\n", a, b, c, d);
// But because of an overflow error, that code can
// print something unexpected, like: 1 2 3 1410065407
// instead of "failed"

辅助字符串可用于检测输入错误,例如:

代码语言:javascript
复制
const char *text = "1 9999999999 text";
QString item1, item2, item3, item4;
QTextStream stream(text);
stream >> item1 >> item2 >> item3 >> item4;
int a, b, c, d;
bool conversionOk; // Indicates if the conversion was successful
a = item1.toInt(&conversionOk);
if (conversionOk == false)
    cerr << "Error 1." << endl;

b = item2.toInt(&conversionOk);
if (conversionOk == false)
    cerr << "Error 2." << endl;

c = item3.toInt(&conversionOk);
if (conversionOk == false)
    cerr << "Error 3." << endl;

d = item4.toInt(&conversionOk);
if (conversionOk == false)
    cerr << "Error 4." << endl;

将打印"Error 2.“、"Error 3”。和“错误4”。

注意: cin、cout和cerr也可以在那里定义为:

代码语言:javascript
复制
QTextStream cin(stdin, QIODevice::ReadOnly);
QTextStream cout(stdout, QIODevice::WriteOnly);
QTextStream cerr(stderr, QIODevice::WriteOnly);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13623426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档