二进制换十进制的问题,如何抵抗非法输入?
小弟写了一个小程序,实现二进制转十进制。以下是代码:#include<stdio.h>void main()
{
int f;
loop:for(f=1;;f++)
{
int fun(int x);
char b;
int a;
int i=0,j,l=0,s;
printf(" Input num(er jing zhi):\n");
while((b=getchar())!='\n')
{
i++;
}
b='\0';
i=0;
while(b!='\0')
{
if(b=='1')a=1;
else if (b=='0')a=0;
else
{
printf("非法输入,请重试!\n");
goto loop;
}
i++;
}
for(j=0;j<i;j++)
{
s=a*fun(i-j-1);
l=l+s;
}
printf("二进制数为:");
for(j=0;j<i;j++)
{
putchar(b);
}
putchar('\n');
printf("十进制数为:");
printf("%d\n",l);
putchar('\n');
}
}
int fun(int x)
{
int y=1,w;
for(w=1;w<=x;w++)
{
y=y*2;
}
return y;
}
以下是运行效果:
在此代码中,我是用goto 语句来实现抵抗非法输入。这在书写代码时,似乎是不提倡的。请问各位,如果不用goto语句,如何实现这个目的呢?
请指教,小弟谢谢了……
可以先将检查输入单独封装为一个函数。
可以使用栈的形式实现:http://bbs.fishc.com/thread-26366-1-1.html 也可以简单点,先定义一个变量(全局或局部都行,用来确定状态),把那个goto那句改为:刚才定义的变量置退出for,然后break退出循环,在循环下面再来一判断,判断那个变量是否为退出for,如符合的continue;当然,坛主教的是更好的方法。 用循环代替goto 正在学习中。。。
页:
[1]