代码之家  ›  专栏  ›  技术社区  ›  RSSB

ctrl+z在程序中是否作为字符计数以计算字符数

eof c
  •  2
  • RSSB  · 技术社区  · 7 年前

    以下是一个计算字符数的程序:

    #include<stdio.h>
    main()
    {
        long nc;
        nc = 0;
        while(getchar() != EOF)
            ++nc;
        printf("%ld\n", nc);
    }
    

    正如我们在这里看到的- Why does getchar() recognize EOF only in the beginning of a line? 那个 ctrl键 + z 在一行字符内写入时不被视为EOF,只有在行首写入时才被视为EOF。

    以下是程序的一些输出:

    123
    abs
    ^Z
    8
    

    在这里,程序返回8,这意味着它也在计算“\n”。

    123^Z
    abs^Z
    ^Z
    8
    

    它再次返回8,那么程序在这里做什么呢?它将忽略^Z作为字符,或者不计算^Z后面的“\n”。

    abc^Zaa
    ^Z
    4
    

    在这里,程序返回4,这意味着在 ctrl键 + Z . 所以我想知道它是不是在计算^Z之后的任何字符,还是也不计算^Z,而是在计算每行末尾的换行符。那么,可以说这里的^ Z也起到了线的末端的作用吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Matteo Italia    7 年前

    这可能取决于您的操作系统,但通常在一行的开头,这意味着 关闭输入流 在一条线的中间 刷新输入流 . 因此,在任何情况下,您的控件字符都可以用于输入(除非您修改终端行为)。尝试此操作,您将看到:

    int c;
    while((c=getchar()) != EOF) {
        ++nc;
        printf("read ascii code %d\n",c);
    }