gpt4 book ai didi

代码仅在所有变量都首先设置为 0 时才有效。乌布?

转载 作者:太空狗 更新时间:2023-10-29 17:25:14 26 4
gpt4 key购买 nike

此代码通过正确识别某些数字回文并在其他回文上失败而随机失败。

#include <stdio.h>


int main(int argc, char *argv[])
{
int n, reverse = 0, temp;

printf("Enter a number to check if it is a palindrome or not\n");
scanf("%d",&n);

temp = n;

while( temp != 0 )
{
reverse = reverse * 10;
reverse = reverse + temp%10;
temp = temp/10;
}

if ( n == reverse )
printf("%d is a palindrome number.\n", n);
else
printf("%d is not a palindrome number.\n", n);

return 0;
}

例如,上面的代码错误地说“87678”不是数字回文。

检查 scanf() 的返回显示它成功并且打印 n 的值对于 87678 的输入是正确的。

但是代码正确地说“4554”是回文。

但是,通过添加:

n = reverse = temp = 0;

在第一个 printf() 之前,程序似乎一直都在正常工作。那么第一个版本发生了什么?当变量在使用前未初始化时,这是某种未定义的行为吗?

编辑:稍后将提供无法查看编译器正在做什么的编译版本的程序集。

最佳答案

除非 sizeof(int) 小于 4,否则您要么遇到了编译器错误,要么您的硬件出现故障,要么您的系统中发生了某种形式的数据损坏。

要回答这个问题:不,程序中的任何地方都没有未定义的行为(假设 scanf() 真的没有失败)。

尝试在您的系统上运行 memtest 以排除 RAM 问题:http://www.memtest.org

关于代码仅在所有变量都首先设置为 0 时才有效。乌布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13118664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com