【初学者】为什么每次输出结果不同?
#include <stdio.h>main()
{ int base,i;
char num[20];
float s=0;
loop: do
{
printf("输入数的进制(<=16):");
scanf("%d",&base);
}while(base<1&&base>=16);
printf("输入该进制的一个整数:");
scanf("%s",num);
i=0;
while(num[i]!='\0')
{
switch(num[i])
{
case 'a':
case 'A': s=s*base+10;break;
case 'b':
case 'B': s=s*base+11;break;
case 'c':
case 'C': s=s*base+12;break;
case 'd':
case 'D': s=s*base+13;break;
case 'e':
case 'E': s=s*base+14;break;
case 'f':
case 'F': s=s*base+15;break;
case '9': case '8': case '7': case '6': case '5':
case '4': case '3': case '2': case '1': case '0':
s=s*base+num[i]-'0';break;
}
i++;
}
printf("%d进制整数%s的十进制结果为%g\n",base,num,s);
system("pause");
goto loop;
}
第一次结果正常。但从第二次(goto语句后)开始,即使输入与第一次完全相同,结果也不对了。请高手赐教!
编译环境:dev c++
----------------解决方案--------------------------------------------------------
请高手赐教!
----------------解决方案--------------------------------------------------------
你的s在第二次运行的时候还是第一次运行的结果吧!
没错的话,你第二次输入和第一次一样的字符,结果是第一次的2倍,就是因为你的s值是第一次运行完以后的值。
在goto loop;前面加上s=0;就可以了。
最后说句多余的话:尽量不要用goto。
----------------解决方案--------------------------------------------------------
恩 我知道最好不用goto 只是想试试 结果出问题
解决方法是对了 但我还是不懂我错在哪 请你说详细一点好吗
多谢!
----------------解决方案--------------------------------------------------------
哦 我明白了 就是s没有恢复 第二次循环s初值就不是0了
唉!我对C的感觉太差了。。
----------------解决方案--------------------------------------------------------
C语言是面向过程的,确实有些地方不用就不好操作。所以实在没办法用goto也可以,但是像C++就不会经常用到了
----------------解决方案--------------------------------------------------------
我学习c的时候,我们老师就跟我们说最好不要用goto,哪个东西麻烦的很!!!
----------------解决方案--------------------------------------------------------
我到现在都没有用过```只是以前体验过一次```
LZ从这次的错误里``应该知道了```在以后写程序要记得``有些变量是要更新的``
----------------解决方案--------------------------------------------------------