永发信息网

c语言 输入负数程序不能运行

答案:2  悬赏:80  手机版
解决时间 2021-01-25 08:05
  • 提问者网友:椧運幽默
  • 2021-01-25 05:14
#include
int main(int argc, char *argv[])
{
int a=1,b,c=0;
while(a<=10)
{
scanf("%d",&b);
if(b>0)
{
c=c+1;
a=a+1;
}
}
printf("正数个数为%d\n",c);
return 0;
}
输入负数程序不能运行
最佳答案
  • 五星知识达人网友:神鬼未生
  • 2021-01-25 06:50
if(b>0)
{
c=c+1;
}
a=a+1; //这里放在外面就可以了
全部回答
  • 1楼网友:雪起风沙痕
  • 2021-01-25 07:46
楼上的并没有找到错误。x只是应该最好用实型,不过你用整型也没所谓,当表达式中出现浮点数与整数的二元运算时编译器会自动将整型转换为浮点类型在进行运算。所以楼主的程序的问题并不在这儿。而在数组访问越界。楼主,c语言里面数组的下标是从0开始的。所以一个10元素的数组,合法的下标是从0到9。a[0]是第一个元素,a[9]是第十个元素。你的while循环和for循环里面数组的下标都是从1开始的,所以不管是你往数组里面存东西还是从数组里面取东西,你都是从a[1](因为你写的都是a[i])开始的,也就是说数组的第一个元素a[0]你都没有用,然后一直到a[10],而本来a[9]才是你的数组的最后一个元素,结果你非法访问了你的数组的有效范围以外的一个内存单元,即所谓的a[10],这个单元里本来就不在你的数组有小范围之内,所以它里面的值是垃圾值,你打印出来当然就可能是任意值了(这个在不同的运行环境下可能有不同的表现,比如说打印一个很大的值或者一个负数,反正不是你想要的值)。你的程序有两种改法: 1. i=0; while( i < 10 ) for ( i = 0; i < 10; i++ ) 2. 把循环体里面的a[i]改成a[i-1],这样你的数组访问就不会越界了,i=1的时候,刚好是a[0],i=9的时候,刚好到最后一个元素a[9]。 另外,楼上的说得也没错,你最好把你的运算操作数都改成浮点类型(float或者double),不要依赖编译器帮你做类型转换
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯