Experience0413 2023-11-09 00:49 采纳率: 0%
浏览 1

C语言代码段报错测试


#include<stdio.h>
int main() {
    long long int a,b,c,i;
    int count = 1;
    scanf_s("%lld", &a);
    if (double(a) != int(a)) {
        printf("NULL");
        }
    else{
        c = a;
        while (a / 10 != 0) {
            count++;
            a = a / 10;
        }
        if (c > 0) {
            for (i = 1; i <= count; i++) {
                b = c;
                b = b % 10;
                if (b > 0) {
                    printf("%lld", b);
                }
                c = c / 10;
            }
        }
        else {
            printf("NULL");
        }
    }
    return 0;
}

请看看为什么这段代码在测试部分数据时候回报错,直接显示为NULL,但是也有一部分数据可以通过

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-09 02:05
    关注

    【以下回答由 GPT 生成】

    这段代码在测试部分数据时报错并显示为"NULL"的原因是因为在输入大于等于10的整数时,程序会进入while循环,并逐渐将输入的数除以10,直到最后剩下个位数。然而,在这个过程中有一段代码b = c;会将输入的数赋给变量b,然后再运算b = b % 10。这两行代码的作用是取变量b的个位数,然后打印出来。但是,在大于等于10的整数输入情况下,这个过程会导致打印出来的结果出现错误。

    具体来说,当输入的数大于等于10时,程序会进入for循环,并通过c = c / 10将输入的数每次除以10,直到c变为个位数。然后在每次循环中,进行取模运算b = b % 10,这里的b就是c。但是,由于c是先赋值为输入的数,然后再进行运算,所以c的值会被改变。这会导致在打印个位数时出现错误。

    解决这个问题的方法是将b = c;这行代码放在for循环之前,这样每次循环时b的值是固定的,不会被改变。以下是修改后的代码:

    #include <stdio.h>
    
    int main() {
        long long int a,b,c,i;
        int count = 1;
        scanf_s("%lld", &a);
        if ((double)(a) != (int)(a)) {
            printf("NULL");
        }
        else{
            c = a;
            while (a / 10 != 0) {
                count++;
                a = a / 10;
            }
            if (c > 0) {
                b = c; // 将此行代码移到for循环之前
                for (i = 1; i <= count; i++) {
                    b = b % 10;
                    if (b > 0) {
                        printf("%lld", b);
                    }
                    c = c / 10;
                    b = c; // 添加这行代码以更新b的值
                }
            }
            else {
                printf("NULL");
            }
        }
        return 0;
    }
    

    这样修改后,代码就可以正确处理大于等于10的整数输入,不会报错并显示"NULL"了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月9日

悬赏问题

  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?