Qt 使用remquo函数的断言失败

Qt 使用remquo函数的断言失败,qt,assertion,Qt,Assertion,我正在处理的代码旨在创建一个包含104列和104行的电子表格。您可以猜到的列标题增加了字母表。在Z字母之后,有AA到AZ等等 现在,我正在测试这样一个事实:在Z之后,代码从A循环到Z,直到它填充104列标题 代码如下: #include "spreadhall.h" #include <cmath> SpreadWnd::SpreadWnd() { formulaInput = new QLineEdit; table = new QTableWidget;

我正在处理的代码旨在创建一个包含104列和104行的电子表格。您可以猜到的列标题增加了字母表。在Z字母之后,有AA到AZ等等

现在,我正在测试这样一个事实:在Z之后,代码从A循环到Z,直到它填充104列标题

代码如下:

#include "spreadhall.h"
#include <cmath>

SpreadWnd::SpreadWnd()
{
    formulaInput = new QLineEdit;

    table = new QTableWidget;
    table->setRowCount(104); // int row = table->rowCount();
    table->setColumnCount(104); int col = table->columnCount();
    table->setSizeAdjustPolicy(QTableWidget::AdjustToContents);

    QString s[26] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
                     "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

    QString str = "";
    for(int i = 0; i < col; i++)
    {
        //int r = (i + 1) % 26;
        if(i > 25)
        {
            int q;
            int r = remquo(i, 25, &q);
            if(r == 0) r = 25;
            str = s[r - 1];
        }
        else
            str = s[i];
        table->setHorizontalHeaderItem(i, new QTableWidgetItem(str));
    }

    vLay = new QVBoxLayout;
    vLay->addWidget(formulaInput);
    vLay->addWidget(table);

    this->setLayout(vLay);
}
#包括“spreadhall.h”
#包括
SpreadWnd::SpreadWnd()
{
formulaInput=新QLineEdit;
table=新的QTableWidget;
table->setRowCount(104);//int row=table->rowCount();
table->setColumnCount(104);int col=table->columnCount();
表->SetSizedJustPolicy(QTableWidget::AdjustToContent);
Q字符串s[26]={A”,“B”,“C”,“D”,“E”,“F”,“G”,“H”,“I”,“J”,“K”,“L”,“M”,
“N”、“O”、“P”、“Q”、“R”、“S”、“T”、“U”、“V”、“W”、“X”、“Y”、“Z”};
QString str=“”;
for(int i=0;i25)
{
int-q;
int r=remquo(i,25,&q);
如果(r==0)r=25;
str=s[r-1];
}
其他的
str=s[i];
表->setHorizontalHeaderItem(i,新的QTableWidgetItem(str));
}
vLay=新的QVBoxLayout;
vLay->addWidget(formulaInput);
vLay->addWidget(表格);
此->设置布局(vLay);
}
循环的For是一段写入头的代码。当我在For循环的第一行使用注释中的代码时,一切正常,标题从A循环回Z。但是当我使用remquo函数时,我在运行时得到一个断言失败。我不明白为什么

有人知道怎么回事吗

N.B:

我不使用余数函数,因为我需要商来设计Z之后的AA,等等

我正在Win8平台上的64位Acer笔记本电脑上使用带MSVC2013的Qt5.3


谢谢

您面临的问题是
remquo()
计算余数方法的结果。如果你看一下,你会发现:

除法运算x/y的IEEE浮点余数 此函数计算的值正好是x-n*y,其中 值n是最接近精确值x/y的整数值

因此,对于某些值,商被四舍五入到下一个整数,余数为负值,即
s
数组的负索引

例如,考虑
remquo(13,25,x)
。你明白了:

13 / 25 = 0.52
商被四舍五入到
1
,得到以下结果的余数:

13 - 1 * 25 = -12
您可以使用而不是
remquo()
,它返回预期值:

div_t d = div(13, 25);
qDebug() << d.quot;    // x / y  --> 0
qDebug() << d.rem;     // x % y  --> 13
div\u t d=div(13,25);
qDebug()0
qDebug()13

谢谢,这就是我一直在寻找的解决方案。