下面给出的代码使用(int
数据类型)最多可以正常工作 10 位数字,但是对于超过 10 位数字的数字它失败了,所以我尝试了unsigned long long int
. 但是现在我的输出固定为 15 ,为什么?认为我对 C 很陌生,但我的 Python 背景很一般!
我正在使用 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609
#include <stdio.h> //Get number of digits in a int
unsigned long long int get_len();
void main() {
unsigned long long int num;
printf("Enter the number:");
scanf("%d",&num);
printf("\nThe length of number is is: %d \n",get_len(num));
}
unsigned long long int get_len(unsigned long long int z) {
unsigned long long int i = 1;
while (1) {
if ((z/10) > 1) {
//printf("Still greater than 1");
i++;
z = z/10;
continue;}
else {
return(i+1);
break;}}}
您使用了错误的格式说明符。这将是scanf("%llu",&num);
使用错误的格式说明符scanf
是未定义的行为。
除了提到的内容之外,您的长度查找逻辑是错误的,因为它对于个位数和多位数都将失败。
因为1
它将返回位数2
,其他数字也类似。(就像12
它会返回3
)。
对于较大的数字,您可以选择一个库(大数字处理)或根据需要编写其中之一。
我会像这样扫描数字if( scanf("%llu",&num) != 1) { /* error */}
。更清楚地检查 的返回值scanf
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句