首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

看不懂一个东东,该怎么处理

2012-03-15 
看不懂一个东东这是K&R的一个例子(对于各位老鸟应该是月经问题了:)就不全写了),小弟标识出有点疑问导致整

看不懂一个东东
这是K&R的一个例子(对于各位老鸟应该是月经问题了:)就不全写了),小弟标识出有点疑问导致整个程序费解,请详细指点下啦,谢谢了


#include <ctype.h>
int   getch(void);
void   ungetch(int);
int   getop(char   s[])
{
int   i,c;
while((s[0]=c=getch())== '   '||c== '\t ')  
;                       1.---输入非 '   '或   '\t '是while结束,s[1]= '\0 ';程序就return   '0 ',下面的那些if   不是多余?

s[1]= '\0 ';
if(isdigit(c)&&c!= '. ')
    return   c;
i=0;
if(isdigit(c))
      while(isdigit(s[++i]=c=getch()))
          ;
if(c== '. ')
      while(isdigit(s[++i]=c=getch()))
          ;
s[i]= '\0 ';
if(c!=EOF)
      ungetch(c);
      return   ‘0’;  
}

[解决办法]
while((s[0]=c=getch())== ' '||c== '\t ') //循环结束后,c中存在第一个非空白符字符。
;
s[1]= '\0 ';
if(isdigit(c)&&c!= '. ')//应为:if(!isdigit(c)||c!= '. '),如果不是数字或者小数点就返回
return c;

if(isdigit(c))
while(isdigit(s[++i]=c=getch()))//否则的话将数字记录到s[]中
;
if(c== '. ')//c取‘.’时结束上面的循环,开始下面循环,记录小数点后面数字
while(isdigit(s[++i]=c=getch()))
;
s[i]= '\0 ';//直道结束
if(c!=EOF)
ungetch(c);
return ‘0’;

热点排行