C:为什么;输入“;此代码中的键触发器输出?

C:为什么;输入“;此代码中的键触发器输出?,c,C,下面是我在“C编程语言”中练习1-13的代码: 为了清楚起见,我只在按下“Enter”键时从printf()和putchar()获取输出。CTRL-D只是结束循环和程序。默认情况下,getchar()处于缓冲模式,因此在按下enter键之前,不会向程序提供字符。此问题的副本:回车键释放缓冲区 在输入之前,您的代码无法使用数据。您的代码同时获取所有字符 操作系统负责维护缓冲区(您可以更改操作系统的这一方面)。在c中,任何输出(除非特别设置)都会被缓冲 在发生以下情况之一之前,不会输出任何内容: 调

下面是我在“C编程语言”中练习1-13的代码:


为了清楚起见,我只在按下“Enter”键时从printf()和putchar()获取输出。CTRL-D只是结束循环和程序。

默认情况下,getchar()处于缓冲模式,因此在按下enter键之前,不会向程序提供字符。此问题的副本:

回车键释放缓冲区

在输入之前,您的代码无法使用数据。您的代码同时获取所有字符

操作系统负责维护缓冲区(您可以更改操作系统的这一方面)。

在c中,任何输出(除非特别设置)都会被缓冲

在发生以下情况之一之前,不会输出任何内容:

  • 调用
    fflush()
  • 输出“\n”
  • 缓冲区已满
  • 因此,您可以在调用
    printf()

    注意:除了制表符、空格和换行符之外,您可能还需要其他单词分隔符


    建议添加:单引号、双引号、句号、冒号、分号、左括号、左大括号、右括号、右大括号、右勾号。

    是否使用Windows?它有一个不同的行尾。它使用
    \r\n
    不,我在Ubuntu 16.04上。
    #include <stdio.h>
    
    int main()
    {
        int c, currentIndex, currentLength;
    
        currentLength = currentIndex = 0;
    
        while ((c = getchar()) != EOF){
            if (c == '\t' || c == '\n' || c == ' '){
                if (currentLength == 0){
                    continue;
                }
    
                printf("Length of word %d: ||", currentIndex);
    
                for (int i = 0; i < currentLength; i++){
                    putchar('-');
                }
                putchar('\n');
    
                currentLength = 0;
                ++currentIndex; 
            } else {
                ++currentLength;
            }   
        }
    
        return 0;
    }
    
        how long are these words
        Length of word 0: ||---
        Length of word 1: ||----
        Length of word 2: ||---
        Length of word 3: ||-----
        Length of word 4: ||-----