只是想学C 发表于 2014-4-9 04:23:27

二进制换十进制的问题,如何抵抗非法输入?

小弟写了一个小程序,实现二进制转十进制。以下是代码:#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语句,如何实现这个目的呢?

请指教,小弟谢谢了……



只是想学C 发表于 2014-4-9 04:24:42

小甲鱼 发表于 2014-4-9 10:57:29

可以先将检查输入单独封装为一个函数。

可以使用栈的形式实现:http://bbs.fishc.com/thread-26366-1-1.html

pzhccy 发表于 2014-4-9 11:54:59

也可以简单点,先定义一个变量(全局或局部都行,用来确定状态),把那个goto那句改为:刚才定义的变量置退出for,然后break退出循环,在循环下面再来一判断,判断那个变量是否为退出for,如符合的continue;当然,坛主教的是更好的方法。

牡丹花下死做鬼 发表于 2014-4-9 15:28:33

用循环代替goto

水鱼 发表于 2014-4-9 16:45:57

正在学习中。。。
页: [1]
查看完整版本: 二进制换十进制的问题,如何抵抗非法输入?