读书人

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

发布时间: 2012-03-15 11:50:38 作者: rapoo

看不懂一个东东
这是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’;

读书人网 >C语言

热点推荐