gpt4 book ai didi

c - C 中的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 15:16:00 25 4
gpt4 key购买 nike

所以,我将这两种算法放在一起:

int digitCount(int num){
int count;
while (num) {
num /= 10;
count++;
}
return count;
}

int digitSplit(int num, int digit) {
int i, base = 1, count = digitCount(num);
for(i = 1; i <= count + 1 - digit; i++)
base *= 10;
return num % base / (base / 10);
}

虽然我知道它们可能不是最佳的,但 digitalSplit 给了我一些非常奇怪的行为:

for (i = 1; i < 4; i++)
printf("%d", digitSplit(432, i));

无论如何设置,这个总是会崩溃。

printf("%d, %d, %d", digitSplit(432, 1), digitSplit(432, 2), digitSplit(432, 3));

这个输出 0, 0, 2。

printf("%d", digitSplit(432, 1));
printf("%d", digitSplit(432, 2));
printf("%d", digitSplit(432, 3));

这些输出 4 3 2 单独运行,否则它们会使程序崩溃 => for-循环。

显然不知道为什么会发生这种情况,我的 digitSplit 就是原因,但是 0, 0, 2 是如何产生的?

最佳答案

C中可能出现的几个问题:如果不初始化变量,它的值就是最后更改该内存位的值。用值初始化变量始终是一种很好的形式,但在 C 中这一点尤为重要:

int digitCount(int num){
int count = 0;
while (num) {
num /= 10;
count++;
}
return count;
}

您在 digitalSplit() 中返回的内容不正确。你想要移动一个特定的数字,使其位于个位,然后用 mod 10 隔离该数字。首先,我们必须将 num 除以 10^(count-digit),将所需的数字移动到个位。 ,而不是 10^(计数+1 位数字)。让 10^(count-digit) = 基数,所以我们有(数字/基数)。现在我们只需要找到那个人的位置。我们用 mod 来做到这一点:

int digitSplit(int num, int digit) {
int i, base = 1, count = digitCount(num);
for(i = 1; i <= count - digit; i++)
base *= 10;
return (num/base)%10;
}

关于c - C 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33291476/

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