最后s[i] = '\0'时不就覆盖了最后一个数吗
#include <stdio.h>#include <ctype.h>
int getop(char s[])
{
int i,c;
while((s = c = getch()) == ' ' || c == '\t')
;
s = '\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'; /* 上面一行是++i因此i是最后一个数并不是赋值了以后再+1,但是这里的s='\0'不就把最后一个字符赋值成了终止符吗 */
if(c != EOF)
ungetch(c);
return NUMBER;
}
/* 谢谢解答 */ 首先,整体来看,数组s应该是想获取输入内容中的0~9的数字(下列统称十进制数),
while(isdigit(s[++i] = c = getch()))
;
注意这个while循环的跳出条件,当它跳出的时候,就是isdigit()返回0(即获取的内容为非十进制数)。
函数传参的表达式先执行,即s[++i] = c = getch()已经被执行了,此时s数组最后一个存储的内容是一个非十进制数,这不是我们想要的十进制数,所以下一句
s = '\0'; 覆盖的内容不是我们想要的十进制数。
因此没问题。
如果猜错,欢迎指出。
页:
[1]