while(scanf("%c",&n)!=EOF)
{
scanf("%d",&m);
if(n=='B')
{sum=0;
for(i=0;i>=0;i++)
{
r[i]=m%10;
sum=sum+r[i]*pow(2,i);
m=m/10;
if(m/10==0)
break;
}
printf("%d",sum);
第一句有问题,scanf你是无法读取到EOF的,End Of File,在电脑的术语缩写通常为 EOF,在作业系统决定资料源无更多的资料可读取。
for循环也有问题,判断循环结束用i>=0,会一直为真,循环无法结束。当然你的代码里面有跳出break,但这种写法比较奇特。
看你的程序,应该是把二进制转换成十进制的数,代码不全,不好给你查错。
for循环也有问题,判断循环结束用i>=0,会一直为真,循环无法结束。当然你的代码里面有跳出break,但这种写法比较奇特。
看你的程序,应该是把二进制转换成十进制的数,代码不全,不好给你查错。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-12-03
你这个程序写的很乱,首先各个变量没有定义类型,n,m,sum r[i], 其次pow要用到include<math.h>
算法也不清楚你到底想干什么,另外scanf("%c",&n)!=EOF) 这个是错误的。EOF只有在读文件的时候这么写。
算法也不清楚你到底想干什么,另外scanf("%c",&n)!=EOF) 这个是错误的。EOF只有在读文件的时候这么写。
第2个回答 2013-12-03
是否漏了头文件 #include <math.h> ?
你的 pow(2,i); 需要 math.h
n 的变量类型 是否 用了 char ?
拍入 B 后 有没有 忘了 换行 就拍数字?
输入数据 是否 在你考虑 的范围 以内?
------------
#include<stdio.h>
#include <math.h>
main(){
char n;
int m,i;
int r[32],sum;
while(scanf("%c",&n) !=EOF)
{
scanf("%d",&m);
if(n=='B')
{sum=0;
for(i=0;i>=0;i++)
{
r[i]=m%10;
sum=sum+r[i] * (int) pow(2,i);
m=m/10;
if(m ==0)break; // 改了一下,不知是不是 要 这个意思
}
printf("%d\n",sum);
}
}}
===========
用 Ctrl-C 组合键 结束程序。
不清楚你要算什么,但不致于是0。追问
你的 pow(2,i); 需要 math.h
n 的变量类型 是否 用了 char ?
拍入 B 后 有没有 忘了 换行 就拍数字?
输入数据 是否 在你考虑 的范围 以内?
------------
#include<stdio.h>
#include <math.h>
main(){
char n;
int m,i;
int r[32],sum;
while(scanf("%c",&n) !=EOF)
{
scanf("%d",&m);
if(n=='B')
{sum=0;
for(i=0;i>=0;i++)
{
r[i]=m%10;
sum=sum+r[i] * (int) pow(2,i);
m=m/10;
if(m ==0)break; // 改了一下,不知是不是 要 这个意思
}
printf("%d\n",sum);
}
}}
===========
用 Ctrl-C 组合键 结束程序。
不清楚你要算什么,但不致于是0。追问
可是按你改的输入一个二进制的数有时候转化出来是负数为什么
追答估计是你给的数值太大了。scanf("%d",&m); 这个 m 有极限大小,超界就成了负数。
例如 1111111111111111 作为2进制数,数值不大。
但 scanf("%d",&m); 读语句的 m
是按10进制数理解 输入 的,这是很大 的 10进制数。
可是我输入10010101010101是-3155输入111111111111111是1407