标题:Thank 哪位给个解决的方法!!
只看楼主
无奈的猪
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-18
结帖率:100%
已结贴  问题点数:10 回复次数:8 
Thank 哪位给个解决的方法!!
#include<stdio.h>
#include<math.h>
void main()
{
    int i,j,n,a[10],b;
    scanf("%d",b);
    if(b>1e6)
        printf("这是个错误的数字");
    else
    {
        for(i=0;i<5;i++)
            a[i]=(int)((b%pow(10,i+1))/pow(10,i));   /**************/
        if(a[i]!=0)
            n++;
    }
    for(j=4;j>=0;j--)
        printf("%d",a[j]);
        printf("This is a %d number",n);
}
     调试这个程序时,打重点的部分老是弹出“右边部分已是double型”,我想把它强制转换为int型,可就是不行。哪位可以帮忙解决下!!!
搜索更多相关主题的帖子: Thank 
2010-07-09 07:25
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:2 
程序是否可以运行?是warning还是error?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-09 07:39
无奈的猪
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-18
得分:0 
不可以运行,是个illegal
2010-07-09 08:05
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:2 
程序代码:
#include<stdio.h>
#include<math.h>
void main()
{
    int i,j,n=0,a[10],b;/*n得初始化为零,不然后面的自加不行*/
    scanf("%d",&b);/*这个地方少了&*/
    if(b>1e6)
        printf("这是个错误的数字");
    else
    {
        for(i=0;i<5;i++)
            a[i]=(b%(int)pow(10,i+1))/(int)(pow(10,i)); /*我改成这样就不报错了,不过我不知道为什么*希望谁给个解释*/  /**************/
        if(a[i]!=0)
            n++;
    }
    for(j=4;j>=0;j--)
        printf("%d",a[j]);
        printf("This is a %d number",n);
}
楼主看看哈
2010-07-09 08:15
jackface
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2009-4-15
得分:2 
你有没有看一下POW函数的原型。
2010-07-09 08:23
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
得分:2 
double这个类型很多陷阱的;
因为它那个小数末尾的无效数字是随机的;
但double类型强制转换成int采取的是四舍五入,
所以应该不会出错的啊;

选B;(当然,我还没有看明白你的题目的前部分“若各变量以正确赋值”,呵呵,但希望我的解析对你有帮助)
A. a=a+b=b++    在不同的系统可能有不同效果,因为若从右到左运算,b++改变了b的值,若从左到右,则b没有增值,所以有问题;
B. w%(int)(a+b)  %求摸两边的参数必须都是整型,这个没问题;
C. (c+w)%(int)a     %求摸两边的参数必须都是整型,c+w是将低级的往高级转变,int型的c先变为c的类型long型再运算,结果是long型,所以有问题。
 D. w=a==b      ‘==’的优先级比‘=’高,先计算"a==b",再把它们的结果(1或0)赋给w,好像这种方法的意义不大,....一般出现这种问题的错误愿意都是(w=a)==b,先赋值再比较,这样更有意义哈。
2010-07-09 08:30
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
得分:0 
程序代码:
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
void main()
{
    int i,j,n=0,a[10],b;/*n得初始化为零,不然后面的自加不行*/
    scanf("%d",&b);/*这个地方少了&*/
    if(b>1e6)
        printf("这是个错误的数字");
    else
    {
        for(i=0;i<5;i++)
            a[i]=(b%(int)pow(10,i+1))/(int)(pow(10,i)); /*我改成这样就不报错了,不过我不知道为什么*希望谁给个解释*/  /**************/
        if(a[i]!=0)
            n++;
        for(j=4;j>=0;j--)/*我把这个FOR循环放在了ELSE后面是为了防止输入大于1e6后出现的错误*/
             printf("%d\n",a[j]);
             printf("This is a %d number\n",n);/*话说你这里我没太明白什么意思*/
    }

 
    system("pause");/*这个事用来暂停的*/
}

2010-07-09 09:13
无奈的猪
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-18
得分:0 
非常感谢给位拉,终于解决啦!!
2010-07-09 10:57
sw84114505
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2010-7-2
得分:2 
为什么这N总是1呢?
2010-07-09 18:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-312465-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.351187 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved