【问题标题】: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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答,它解决了问题。只是想知道,为什么当我打印出测试时它会起作用?
    • 如果行为未定义,任何事情都可能发生。 UB 最不幸的行为之一是程序在损坏时似乎可以工作。
    • @Joel 基本上,编译器会尝试重新排列您的程序以使其更快(这称为优化)。当您将打印件放在那里时,它会以不同的方式重新排列它。这就是为什么“未定义的行为”会导致奇怪的事情发生的常见原因。
    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2016-10-02
    • 2020-12-30
    相关资源
    最近更新 更多