整容说文库 > 程序代码 > 教育资讯

很简单的问题,为啥出错?

来源:学生作业帮助网 编辑:整容说文库 时间:2021/05/19 07:53:28 程序代码
很简单的问题,为啥出错?程序代码
要求是输入一个5位数,然后按位输出,例如:输入42339,输出4  2  3  3  9。
我写的如下:
#include <stdio.h>

main()
{
    long x, a, b, c, d, e;

    printf("Enter your number:\n");
    scanf("%d", &x);

    a = x / 10000;
    printf("%d ", a);

    b = x / 1000 - x / 1000 * 10;
    printf("%d ", b);

    c = x / 100 - x / 1000 * 10;
    printf("%d ", c);

    d = x / 10 - x/100 * 10;
    printf("%d ", d);

    e = x - x / 10 * 10;
    printf("%d ", e);

    return 0;
}

单独输出每一位数都是对的,为啥像上面这样输出,输出的结果都是些乱七八糟的数字?
用TC2写的。
x / 1000 - x / 1000 * 10
这个式子的结果是负数吧? 你打错了吧?
。。。 没事。。没事。。我看错了。。。。 。。
晕,我没看错,是你打错了,应该是x / 1000 - x / 10000 * 10
h哈哈

楼上正解
程序错误比较多。首先你定义的变量类型是long,而输入时又用的是整形,存在强制类型转换问题;其次最大的问题就是你的取各个位数的算法根本就是错误的。所以,得不到正确结果是正常的。
#include <stdio.h>
int main()
{
 int num,a,b,c,d,e;
 printf("Enter your number:");
 printf("%d",&num);
 if(num<10000)
  { printf("the number is error.\n");
    return(1);
   }
 a=num/10000;
 b=num/1000-a*10;
 c=num/100-b*10-a*100;
 d=num/10-c*10-b*100-a*1000;
 e=num-a*10000-b*1000-c*100-d*10;
 printf("%d %d %d %d %d\n",a,b,c,d,e);
 return(0);
 }
偶用的网吧机,没调试,你自己运行试试吧。
呵呵,打快了。
printf("Enter your number:");
 printf("%d",&num);
应该是scanf("%d",&num),不好意思哦。
呵呵,打快了。
printf("Enter your number:");
 printf("%d",&num);
应该是scanf("%d",&num),不好意思哦。
-------------------------------
scanf("%ld", &num);
still_rain(☆雨一直在下☆) 的程序是对的,但是为什么说楼主的是错的呢?楼主的程序在将 b = x / 1000 - x / 1000 * 10;  printf("%d ", b);  的b改成 = x / 1000 - x / 10000 * 10; 就是好的了,怎么会错呢?不懂~
谢谢上面几位热心人的解答。但小弟还是有几处不明白,望赐教。

首先我的算法应该是没有错的(b = x / 1000 - x / 1000 * 10;是我打错了,在此表示歉意)应该是b = x / 1000 - x / 10000 * 10;将42339带入,x / 1000 = 42 , x / 10000 = 4 , 然后*10,得40,二者相减便得千位上的数2。x / 100 = 423, x / 1000 = 42, *10得420,两者相减的百位上的数3。其他位上的数同理可得。

其次,用int声明输入变量x会出错, 而用long 则不会。

然后 %d 书上说是用来输出十进制有符号整数,和整数的类型有关系吗?

最后 to  still_rain:您给出的程序我TC下试了一下,也会出错。
#include <stdio.h>

main()
{
    int x;
    int a, b, c, d, e;

    printf("Enter your number:\n");
    scanf("%d", &x);

    a =x / 10000;
    printf("\n%d ", a);

    b = x / 1000 - x / 10000 * 10;
    printf("%d ", b);

    c = x / 100 - x / 1000 * 10;
    printf("%d ", c);

    d = x / 10 - x/100 * 10;
    printf("%d ", d);

    e = x - x / 10 * 10;
    printf("%d ", e);

    getch();
}

以上可以,但x不能超过32767,否则结果就不对;如果x为long,遗憾,我得出的结果总是始料未及的,呵呵
still_rain的程序也对,前提是x的值不超过32767

我用的TC2.0
对了,改为如下就可以了:

……
long x;
……
scanf("%ld",&x);
……

就不受x不超过32767的限制了
太麻烦了,还是这样写容易些。

int x = 32767;
char szTem[10];

sprintf(szTem, "%d", x);

for (int i = 0; i < strlen(szTem); i++)
{
printf("%c ", szTem[i]);
}
printf("\n");
谢谢大家,问题解决。
to ra3(啄木鸟) :
呵呵,题目对使用的语句有限制,只能用几个简单的语句。
程序代码