在书中的位置是66页,原代码如下:
/* 获取下一个运算符或者数值操作值*/
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[i]='\0';
if(c!=EOF)
ungetch(c);
return NUMBER;
}
我不太明白 s[1]='\0'; 这个语句有什么意义,在收集整数和小数的时候这个语句存入的数据又会被覆盖,所以为什么要加这个语句?
还有一个语句我不太清楚它的意思。
if(!isdigit(c)&&c!='.')
return c;
书中注释是“不是数”,那么也就是说它是运算符了?这个我是想确认一下。
如果哪位能解决我的问题,我真是感激不尽!
因为这里定义的s是一个字符数组,而不是字符串常量。这两个东西有唯一的区别:字符串常量在系统中保存的时候以字符数组的形式保存,会自动添加'\0'。
所以这个程序的变量s,如果在下一条if语句返回的话,必须在s结尾添加'\0'以此作为字符数组的结尾。
简单来说,声明一个字符串常量,可以没有空字符。但是声明字符数组,结尾必须是空字符。
\0设置字符串结束
不是数,也就是说是运算符,如果程序不包含非法输入的情况,那么不是分割符、数字、小数点,那么肯定只有运算符了。因此可以这么理解。
另外你的程序应该不支持括号吧。