首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

把二进制变换十进制,循环的地方交换位置为什么出错

2013-09-28 
把二进制转换十进制,循环的地方交换位置为什么出错?int main(){cout请输入8位二进制的数:endlchar

把二进制转换十进制,循环的地方交换位置为什么出错?

int main(){

cout<<"请输入8位二进制的数:"<<endl;
char ch;
int i=7,sum=0;

for(;i>=0;i--) {

cin>>ch;
if(ch=='1')
sum += power(2,i);
}
cout<<"转换后的十进制数位:"<<sum<<endl;
return 0;
}

double power(double x,int n){
double r=1.0;
while(n--){
r *=x;
}


return r;
}

如果for循环改为这样为什么出错?
for(;i>=0;) {
i--;
cin>>ch;
if(ch=='1')
  sum += power(2,i);
}
二进制 power 循环出错
[解决办法]
一进入函数就执行i-- i = 6,5,4,3,2,1,0 只换算了7位
[解决办法]
i每次循环进来就 进行了自减一次了!

// 方法1 
for(;i>=0;) 
{

    cin>>ch;
    if(ch=='1')
      sum += power(2,i);
    i--;
 }

//方法2
int i = 8;
for(;i>0;) 
{
    i--;
    cin>>ch;
    if(ch=='1')
      sum += power(2,i);
}



[解决办法]
你的方法2 像你输入(0000 0011)
他最后一次循环是power(2,-1),while循环当然跳不出
[解决办法]
楼主你没弄明白 for(;i>=0;i--) 是怎么执行的。。。

这条语句,先执行i>=0,然后执行循环体,再执行的是 i--; 在判断i>=0是否为真,然后再执行循环体,再执行的是 i--; 

如果是for(;i>=0;) {     i--; 
执行的顺序就变了,先执行i>=0,然后执行循环体,相对于上一个语句,这个i--是在上个循环体之前执行。




[解决办法]
引用:
Quote: 引用:

在C语言中,非零数表示真(true),零表示假(false)。
while(n) 如果n为负数时,while条件为真
但是我的判断条件不是while(n--)啊,而是while(n>=0)
当n==-1时,while里面是(false).

double power(double x,int n){
    double r=1.0;
    while(n--){
        r *=x;
    }
 
这不是你自己写的吗
难道我眼花?

热点排行