我蒸叫佐赫 发表于 2020-2-4 09:34:56

最后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;
}
/* 谢谢解答 */

739890164 发表于 2020-2-4 12:52:00

首先,整体来看,数组s应该是想获取输入内容中的0~9的数字(下列统称十进制数),
                while(isdigit(s[++i] = c = getch()))
                        ;
注意这个while循环的跳出条件,当它跳出的时候,就是isdigit()返回0(即获取的内容为非十进制数)。
函数传参的表达式先执行,即s[++i] = c = getch()已经被执行了,此时s数组最后一个存储的内容是一个非十进制数,这不是我们想要的十进制数,所以下一句
s = '\0'; 覆盖的内容不是我们想要的十进制数。
因此没问题。

如果猜错,欢迎指出。
页: [1]
查看完整版本: 最后s[i] = '\0'时不就覆盖了最后一个数吗