必须打印到屏幕才能使程序正常工作
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 基本上,编译器会尝试重新排列您的程序以使其更快(这称为优化)。当您将打印件放在那里时,它会以不同的方式重新排列它。这就是为什么“未定义的行为”会导致奇怪的事情发生的常见原因。以上是关于必须打印到屏幕才能使程序正常工作的主要内容,如果未能解决你的问题,请参考以下文章