注册 登录
编程论坛 C语言论坛

新手求助

lxk1732942 发布于 2018-09-23 16:43, 1341 次点击
程序代码:
#include<stdio.h>
void main()
{
    long m;
    int a,b,c,d,e,n;
    printf("请输入一个不多于5位的正整数:    ");//现在还没有学goto语句,应去掉loop:
    scanf("%ld",&m);
    while(m!=(long)m||m<1||m>99999)
    {
        printf("    输入有误\n\n\n请重新输入:                     ");
        scanf("%ld",&m);
    }
    if(m<=9)n=1;
    else if(m<=99)n=2;
    else if(m<=999)n=3;
    else if(m<=9999)n=4;
    else n=5;
    printf("    它是%d位数\n",n);
    printf("    分别输出每一位数字:");
    a=m/10000;
    b=m/1000%10;
    c=m/100%10;
    d=m/10%10;
    e=m%10;
    switch(n)
    {
        case 1:printf("%d\n    按逆序输出各位数字:%d\n",e,e);break;
        case 2:printf("%d,%d\n    按逆序输出各位数字:%d%d\n",d,e,e,d);break;
        case 3:printf("%d,%d,%d\n    按逆序输出各位数字:%d%d%d\n",c,d,e,e,d,c);break;
        case 4:printf("%d,%d,%d,%d\n    按逆序输出各位数字:%d%d%d%d\n",b,c,d,e,e,d,c,b);break;
        case 5:printf("%d,%d,%d,%d,%d\n    按逆序输出各位数字:%d%d%d%d%d\n",a,b,c,d,e,e,d,c,b,a);
    }
}




运行结果
只有本站会员才能查看附件,请 登录
5 回复
#2
lxk17329422018-09-23 16:44
回复 楼主 lxk1732942
为什么不提示错误
#3
forever742018-09-23 19:15
因为没有发现错误。
scanf是这样想的:
你要我输入一个%ld,那我就从头开始搜集一下能够解释成%ld的东西。
好的,找到一个1,接下来的.5显然和%ld没啥关系,不理它,没准儿接下来还有别的scanf需要处理它呢。

于是接下来没有别的语句来处理.5,但这不是人家scanf的责任啊,你让人家处理啥人家就处理啥了嘛。
#4
lxk17329422018-09-23 19:43
程序代码:
#include<stdio.h>
void main()
{
    long m;
    int a,b,c,d,e,n;
    printf("请输入一个不多于5位的正整数:    ");//现在还没有学goto语句,应去掉loop:
    scanf("%ld",&m);
    while(m<1||m>99999)我改了这一行的判断条件
    {
        printf("    输入有误\n\n\n请重新输入:                     ");
        scanf("%ld",&m);
    }
    if(m<=9)n=1;
    else if(m<=99)n=2;
    else if(m<=999)n=3;
    else if(m<=9999)n=4;
    else n=5;
    printf("    它是%d位数\n",n);
    printf("    分别输出每一位数字:");
    a=m/10000;
    b=m/1000%10;
    c=m/100%10;
    d=m/10%10;
    e=m%10;
    switch(n)
    {
        case 1:printf("%d\n    按逆序输出各位数字:%d\n",e,e);break;
        case 2:printf("%d,%d\n    按逆序输出各位数字:%d%d\n",d,e,e,d);break;
        case 3:printf("%d,%d,%d\n    按逆序输出各位数字:%d%d%d\n",c,d,e,e,d,c);break;
        case 4:printf("%d,%d,%d,%d\n    按逆序输出各位数字:%d%d%d%d\n",b,c,d,e,e,d,c,b);break;
        case 5:printf("%d,%d,%d,%d,%d\n    按逆序输出各位数字:%d%d%d%d%d\n",a,b,c,d,e,e,d,c,b,a);
    }
}


还是有问题


运行结果
只有本站会员才能查看附件,请 登录

#5
豆豆的滴2018-09-24 19:34
输入就是整数型啊
#6
kfyniriu2018-09-24 21:12
#include<stdio.h>

int main()
{
    long m;
    scanf("%ld" , &m);
    printf("%ld\n", m);
    return 0;
}

你可以查看你的输入,和它的输入,了解这个关系。    666666.5 已经是大于 99999
1