gpt4 book ai didi

C - while 和 for 循环的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 15:37:40 24 4
gpt4 key购买 nike

我正在尝试编写一些简单的代码来验证数组中每个数字有多少位,但我遇到了一些奇怪的行为。

数组中的前 3 个数字在 while 循环中被评估为 false,这意味着 (120/1)%10 等于 0,这不应该是这样,或者这里有其他问题。

你有什么想法吗?该算法在数组中的第三个数字之后按预期工作。

感谢您提前提出建议。

int main(){

int nums[SIZE] = {120,210,3,4375,54443};
int i;

for (i = 0; i < SIZE; ++i){

printf("Var i inside FOR: \t%d\n", i);
printf("Var nums i inside FOR: \t%d\n", nums[i]);
int wtest = 1;
printf("Var wtest inside FOR: \t\t%d\n\n", wtest);

while (((nums[i] / wtest)%10) != 0){
wtest = wtest * 10;
printf("Var wtest iside while: \t\t\t%d\n\n", wtest);
}
}

getchar();
return 0;

}

输出:

Var i inside FOR:   0
Var nums i inside FOR: 120
Var wtest inside FOR: 1

Var i inside FOR: 1
Var nums i inside FOR: 210
Var wtest inside FOR: 1

Var i inside FOR: 2
Var nums i inside FOR: 3
Var wtest inside FOR: 1

Var wtest iside while: 10

Var i inside FOR: 3
Var nums i inside FOR: 4375
Var wtest inside FOR: 1

Var wtest iside while: 10

Var wtest iside while: 100

Var wtest iside while: 1000

Var wtest iside while: 10000

Var i inside FOR: 4
Var nums i inside FOR: 54443
Var wtest inside FOR: 1

Var wtest iside while: 10

Var wtest iside while: 100

Var wtest iside while: 1000

Var wtest iside while: 10000

Var wtest iside while: 100000

最佳答案

你的代码逻辑有问题。通过测试除以 10 的余数,您实际上检查相应位置的数字是否为零 - 120 和 210 的最后一位数字就是这种情况。最后一位数字是您首先检查的数字。

您应该只检查除法的结果是否为零:

int wtest = 1;

while (nums[i] / wtest != 0) {
wtest = wtest * 10;
}

如果 nums[i] 小于 wtest,则除法结果为零,因此您可以将其重写为:

int wtest = 1;

while (nums[i] > wtest) {
wtest = wtest * 10;
}

这当然不会为您提供位数,而是为您提供大于您的数字的最小十次方。

关于C - while 和 for 循环的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129671/

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