必须打印到屏幕才能使程序正常工作

Posted

技术标签:

【中文标题】必须打印到屏幕才能使程序正常工作【英文标题】:Have to print to screen for program to work 【发布时间】:2020-07-23 15:32:15 【问题描述】:

所以,我的程序遇到了一些奇怪的问题,如果我写了

#include <iostream>
#include <string>

using namespace std;

bool isPalindrome(int);

int main()

    int biggestPalindrome = 0;
    for(int i = 999; i > 0; i--)
    
        for(int j = i; j > 0; j--)
        
            cout << "Hello" << endl; // This part
            if(isPalindrome(i * j) && i * j > biggestPalindrome) biggestPalindrome = i * j;
            if(i * j < biggestPalindrome) break;
        
        if(i * (i-1) < biggestPalindrome) break;
    
    cout << biggestPalindrome;


bool isPalindrome(int number)

    int temp, rev, digit;
    temp = number;
    do
    
        digit = number % 10;
        rev = (rev * 10) + digit;
        number /= 10;
     while(number != 0);
    return temp == rev;

在这种情况下程序运行良好,但是当我注释掉第 15 行 ('cout

【问题讨论】:

【参考方案1】:

在函数isPalindrome中,rev的值在没有初始化的情况下被使用。

这意味着你正在使用不确定的值。

在要修复的循环之前添加ret = 0;

【讨论】:

感谢您的回答,它解决了问题。只是想知道,为什么当我打印出测试时它会起作用? 如果行为未定义,任何事情都可能发生。 UB 最不幸的行为之一是程序在损坏时似乎可以工作。 @Joel 基本上,编译器会尝试重新排列您的程序以使其更快(这称为优化)。当您将打印件放在那里时,它会以不同的方式重新排列它。这就是为什么“未定义的行为”会导致奇怪的事情发生的常见原因。

以上是关于必须打印到屏幕才能使程序正常工作的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:为啥必须调用重新加载数据才能使我的应用程序正常工作?

为啥我必须执行两次按钮功能才能使我的逻辑正常工作?

为啥必须动态分配扩展数组才能使此函数正常工作 C++

我必须做些啥才能使 EWL 快捷方式 URL 正常工作?

编写Java应用程序,使程序在屏幕上打印输出以下字符图形

如何才能使此代码正常运行?我遇到了if和else语句的问题,显然它没有正确缩进