为什么 C 对大于 10 位的整数进行运算时会输出乱码结果?

乌杜斯萨马德

下面给出的代码使用(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;}}}
用户2736738

您使用了错误的格式说明符。这将是scanf("%llu",&num);

使用错误的格式说明符scanf是未定义的行为。

除了提到的内容之外,您的长度查找逻辑是错误的,因为它对于个位数和多位数都将失败。

因为1它将返回位数2,其他数字也类似。(就像12它会返回3)。

对于较大的数字,您可以选择一个库(大数字处理)或根据需要编写其中之一。

我会像这样扫描数字if( scanf("%llu",&num) != 1) { /* error */}更清楚地检查 的返回值scanf

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么 5 大于 10 蟒蛇?

为什么在C#中线程数大于1

为什么 C++ 在乘以大于 590x590 大小的矩阵时会出现分段错误?

为什么整数不能识别为大于0?

为什么“大于”数字比较会产生意外结果

对数字大于10的NSMutableArray进行排序

我无法上传大于 10 MB 的文件,但我不明白为什么?

为什么我的 int 数组的 Int 值大于 10 时变成 0?

C ++字符串。为什么答案显示字符串“ dog”大于“ cat”,然后“ cat”大于“ dog”?

为什么在 Visual C++ STL 中:“C”不大于“b”

Python 2如何比较string和int?为什么列表比较的结果大于数字,而元组的结果大于列表?

为什么用double进行C#运算要比使用long进行运算更快?

为什么 AWS SDK for Java v2 不允许我发送大于 10 MB 的电子邮件?

C ++大于或等于运算符

为什么此clang代码无法使用-std = c ++ 20的clang 10进行编译

为什么在检查字符值是否大于数字时会得到 TRUE?

当前Unix时间戳的长度可以大于10位吗

为什么read_csv的结果大于read.csv的结果?

为什么该函数在数字大于 48 位的情况下失败?

如何用大于10的间隔分隔不连续的整数序列?

MySQL查询计数结果大于10,然后按组

PHP除以10,结果大于.0时加+1

为什么 Bison 总是输出一个大于号?怎么省略?

如果参数大小大于8192,为什么numpy.sin返回不同的结果?

R:为什么合并数据时-得到的结果大于两个数据

为什么以大于9的幂提高numpy数组会返回错误的结果?

为什么映射转换器的结果包含大于2的Arity?

为什么在对列表进行切片时,列表中的项数总是大于结束索引?

当用大于 255 的整数分配无符号字符时,它会给出不同的输出,为什么?