if语句使用unsigned long Integer - c ++ builder

时间:2017-08-23 19:44:23

标签: c++ c++builder

在下面的代码片段中,myGlobalInt变量是unsigned long int。我在Embarcadero C ++ Builder中运行此代码。

第一个ShowMessage()弹出窗口正确显示myGlobalInt的值,并且大于86399。但是,ShowMessage()语句中的if永远不会触发。

ShowMessage(myGlobalInt);
if (myGlobalInt > 86399) {
    ShowMessage("Job timer stops at 24 hours.");
}

修改:下面显示了所有相关代码,以便您可以重复并希望验证我的结果。这是在Embarcadero RAD Studio 10.2 Tokyo中使用简单的多设备C ++应用程序构建的。

Project.cpp文件中,我有以下相关代码,就在include:

之后
//---- Global variables ---
unsigned long int myGlobalInt;       // used to track seconds
int jobInt;            // used to track which job is accruing time

在我的一个表单的Unit.cpp文件中,我在包含之后有以下代码:

extern unsigned long int  myGlobalInt;  // seconds counter
extern int jobInt;  // which job is accruing time

启用后,表格I在表格上的使用每1秒触发一次。它有以下相关代码:

myGlobalInt++;   // eventually this exceeds 86,399.

ShowMessage(myGlobalInt);
if (myGlobalInt > 86399UL) {
    ShowMessage("Job timer stops at 24 hours.");
}

如果UL字面上没有86399后缀,则"Job timer stops at 24 hours."消息永远不会发生。

修改:根据建议,我创建了一个简单的控制台代码,如下所示。但是,这段代码工作正常 - 没有UL后缀!

#include <tchar.h>
#include <iostream.h>
#include <stdio.h>

int main(int argc, _TCHAR* argv[])
{
    int goofy;
    unsigned long int myGlobalInt = 90000;
    if (myGlobalInt > 86399) {
        std::cout << "Big number";
    }
    std::cin >> goofy;     //this is just to hold the console open
    return 0;
}

我的原始问题(通过将UL放在86399文字的末尾来修复)必须与我将unsigned long int声明为全局变量这一事实有关(在Project.cpp文件中,然后将其带入我的Unit.cpp,以便与extern代码一起使用。

1 个答案:

答案 0 :(得分:-2)

好吧,我认为问题在于编译器无法从上下文中判断86399文字应该被视为无符号长整数。阅读&#34;整数&#34;在下面的第8页,我决定尝试添加&#34; UL&#34;到86399年底:http://helpcentreonline.com/article/primitiv_console_bcc.pdf

这很有效,代码现在正常运行。这是最终版本:

ShowMessage(myGlobalInt);
if (myGlobalInt > 86399UL) {
   ShowMessage("Job timer stops at 24 hours.");
}

希望这有助于下一个新手。 ; - )