关于计算器程序的困惑

时间:2012-02-07 19:38:44

标签: c

int getop(char s[])
{
    int i = 0, c, next;
    /* Skip whitespace */
    while((s[0] = c = getch()) == ' ' || c == '\t')
        ;
    s[1] = '\0';    
    /* Not a number but may contain a unary minus. */
    if(!isdigit(c) && enter code herec != '.' && c != '-')
        return c;
    if(c == '-')
    {
        next = getch();
        if(!isdigit(next) && next != '.')
           return c;
        c = next;
    }
    else
        c = getch();    

    while(isdigit(s[++i] = c)) //HERE
            c = getch();
    if(c == '.')                     /* Collect fraction part. */
        while(isdigit(s[++i] = c = getch()))
                        ;
    s[i] = '\0';
    if(c != EOF)
        ungetch(c);
    return NUMBER;
};

如果没有空格或制表符,s [0]将初始化的值是什么.......& s [1] =' \ 0'

的用途是什么

3 个答案:

答案 0 :(得分:1)

  

如果没有空格或标签比s [0]初始化的值

以下循环将继续执行,直到getch()返回既不是空格也不是标签的字符:

while((s[0] = c = getch()) == ' ' || c == '\t')
    ;
  

s [1] ='\ 0'

的用途是什么

它会将s转换为长度为1的C string,其中唯一的字符已由getch()读取。 '\0'是必需的NUL终止符。

答案 1 :(得分:0)

  1. 如果没有空格或制表符,则会遇到无限循环。

  2. s [1] ='\ 0'是一种标记结尾的方式,所以像strlen()这样的函数 知道何时停止读取c字符串。它被称为“Null-Terminating”字符串:http://chortle.ccsu.edu/assemblytutorial/Chapter-20/ass20_2.html

答案 2 :(得分:0)

while((s[0] = c = getch()) == ' ' || c == '\t')

读取字符,直到它不是标签或空格。

s[1] = '\0';

将char数组转换为C格式的正确字符串(c中的所有字符串必须以空字节终止,该字节由'\ 0'表示。