看这个C语言程序。为什么输出的都是0

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,但这种写法比较奇特。
看你的程序,应该是把二进制转换成十进制的数,代码不全,不好给你查错。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-03
你这个程序写的很乱,首先各个变量没有定义类型,n,m,sum r[i], 其次pow要用到include<math.h>
算法也不清楚你到底想干什么,另外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。追问

可是按你改的输入一个二进制的数有时候转化出来是负数为什么

追答

估计是你给的数值太大了。scanf("%d",&m); 这个 m 有极限大小,超界就成了负数。

例如 1111111111111111 作为2进制数,数值不大。
但 scanf("%d",&m); 读语句的 m
是按10进制数理解 输入 的,这是很大 的 10进制数。

追问

可是我输入10010101010101是-3155输入111111111111111是1407

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网