免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1420 | 回复: 4
打印 上一主题 下一主题

菜鸟,求救! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-04 11:46 |只看该作者 |倒序浏览
#include <ctype.h>
int getch(void);
void ungetch(int);
/* getop:取下一个运算符或数值运算分量*/
int getop(char s[ ] )
{
int i, c;
while ( (s[0] = c = getch() ) == ' ' || c == '\t' )
;
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 = '\0';
if (c != EOF )
ungetch( c );
return NUMBER;
}


其中:if ( isdigit( c ) ) /* 收集整数部分*/
while ( isdigit(s[++i] = c = getch( ) ) )
;
if (c == '.' ) /* 收集小数部分*/
while ( isdigit(s[++i] = c = getch( ) ) )
s = '\0';
这两个语句为什么不用一个if语句,而要分开,请高手指点一下!最要帮我分析一下!谢谢!

论坛徽章:
0
2 [报告]
发表于 2009-11-04 19:40 |只看该作者
你问的第一个if里的while,读到'.'或其它非数字的字符会结束循环
第二个if要先判断当前读到的字符,如果是小数点才有必要继续读取数据。

论坛徽章:
0
3 [报告]
发表于 2009-11-06 12:31 |只看该作者

回复 #2 weichongli 的帖子

能不能跟我具体分析一下这些句子:if (c == '.' ) /* 收集小数部分*/
while ( isdigit(s[++i] = c = getch( ) ) )
s = '\0';
if (c != EOF )
ungetch( c );
return NUMBER。我现在在学习,但是感觉很难理解!

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
4 [报告]
发表于 2009-11-06 14:03 |只看该作者
代码很混乱,我看不懂

论坛徽章:
0
5 [报告]
发表于 2009-11-07 00:30 |只看该作者

回复 #1 klmyt250 的帖子

有代码的帖子最好用用代码插入代码功能。
这样的帖子让人不愿意看。
有点乱
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP