这是我在C#编程语言中的练习1-13的代码":
#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;
}
所以我可以编译它并使用./a.out运行它,但是当我按下#34;输入&#34;要开始一个新的输入行(&#39; \ n&#39;)它会运行printf()和putchar()函数(而不是&#39;&#39;或&#39; \ t&#39;触发输出)。 while循环不会结束(它以END-OF-FILE(CTRL-D)结束)但我想知道为什么这些函数在被调用时会被调用。它可以防止一次输入多行。这是它的输出示例:
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: ||-----
为了清楚起见,当我按下#34;输入&#34;时,我只能从printf()和putchar()获取输出。 CTRL-D只是结束循环和程序。
答案 0 :(得分:1)
mysql
处于缓冲模式,因此在按下enter之前,不会向您的程序提供字符。这个问题重复:How to avoid press enter with any getchar()
答案 1 :(得分:0)
ENTER释放缓冲区。
直到ENTER,您的代码无法获得数据。您的代码会同时获取所有字符。
操作系统负责维护缓冲区(您可能可以更改操作系统的这一方面)。
答案 2 :(得分:0)
在c中,任何输出(除非另有特别设置)都是缓冲的。
在发生以下任何一种情况之前,不会输出任何内容:
fflush()
被称为因此,您可以在调用flush()
printf()
添加电话
注意:除了标签,空格,换行符之外,还有其他一些单词分隔符可供您查找。
建议添加:单引号,双引号,句号,冒号,分号,左键,左括号,右键,右括号,后拨。