C程序计算整数位数时出现的逻辑错误

  • 本文关键字:错误 计算 程序 整数 c integer
  • 更新时间 :
  • 英文 :


我用C语言编写了这个程序来计算整数的位数。这个程序工作得很好,直到我输入一个10位数的数字。如果我输入一个大于10位的整数,代码的行为就会改变。

// Program to calculate the number of digits in an integers.
#include <stdio.h>
int main()
{
int number;
int count = 0;
printf("Enter a number: ");
scanf("%d", &number);
while (number != 0)
{
number = number / 10;
count++;
}
printf("The number of digits in an integer is : %d", count);
}

例如:

Output of program: 
$ gcc digits.c && ./a.out
Enter a number: 1234567890
The number of digits in an integer is : 10

预期输出已成功执行。让我们再看一个例子。

Output of program:
$ gcc digits.c && ./a.out
Enter a number: 12345678901234567890
The number of digits in an integer is : 1

这里,我输入了一个20位的整数,但它返回1位。我不明白为什么会这样?

谁能给我解释一下我在代码中犯了什么逻辑错误?

整数只能存储-2147483648到2147483647之间的值。如果你把它改成unsigned long long就可以了

#include <stdio.h>
int main()
{
unsigned long long number;
int count = 0;
printf("Enter a number: ");
scanf("%llu", &number);  // use %llu here
while (number != 0)
{
number = number / 10;
count++;
}
printf("The number of digits in an integer is : %d", count);
}

输出:

Enter a number: 12345678901234567890
The number of digits in an integer is : 20

您输入的数字太大,不能存储在int类型中。int型(通常)可以存储从-2,147,483,648到2,147,483,647的数字。尝试将number声明为unsigned long(通常)存储从0到18,446,744,073,709,551,615的数字。您还可以尝试将数字存储在某种类型的数组中,并计算其中的元素数量。您还可以一个一个地读取数字(例如使用getchar())并动态地计数。这就消除了数字类型的限制。

最新更新