这段代码是否取消了()' \ n&#39 ;?

时间:2014-10-12 13:41:53

标签: c

我到处搜索,但我找不到答案!我正在使用他们称之为getop的功能从K& R C书籍开始练习。当我输入例如123时,代码检查输入的每个元素,并在它不是数字时停止。在这个例子中它是' \ n&#39 ;;它是否取消了(' \ n')?

int getop(char s[])
{
    int i, c;

    while ((s[0] = c = getch()) == ' ' || c == '\t')
        ;
    s[1] = '\0';
    if (!isdigit(c) && c != '.')
        return c; /* not a number */
    i = 0;
    if (isdigit(c)) /*collect integer part*/
        while (isdigit(s[++i] = c = getch()))
            ;
    if (c == '.') /*collect fraction part*/
        while (isdigit(s[++i] = c = getch()))
            ;
    s[i] = '\0';
    if (c != EOF)
        ungetch(c);
    return NUMBER;
}

ungetch功能:

void ungetch(int c) {
    if(bufp < MAXBUF) {
        printf("ungetch has been called\n");
        buf[bufp++] = c;
    }   
    else 
        printf("the buffer is full\n");
}

1 个答案:

答案 0 :(得分:0)

  

我认为eof用于窗口ctrl + z,'\ n'是东西   否则......?

ISO / IEC 9899 编程语言 - C

  

EOF ...扩展为整数常量表达式,类型为int和   一个负值,由几个函数返回以指示   文件结束,即不再有来自流的输入

Windows上的Ctrl-Z是一个输入组合键,不会再返回任何字符,甚至不会返回与Ctrl-Z(0x1A)等效的字符。

  

\n新行)将有效位置移动到初始位置   下一行。

关于原始问题:由于负值EOF与任何(unsigned char)值不同,是的,此代码执行ungetch()'\n'