我有一个非常简单的程序只需要两个unsigned int
输入,然后通过for循环读出9以下的每个数字:
input 1 : output one
input 2 : output two
等。 9以上输出是偶数还是奇数。
一切正常,除非我调用std::flush
时,它不会将缓冲区刷新到屏幕,但std::endl
会这样做。使用下面的代码,我没有输出,但是通过将flush
更改为endl
我得到了输出。为什么是这样?我尝试查找它,我发现有点相关的是Calls to flush cout are ineffective,其中说问题是插入了/r
,但我无法看到这是怎么回事因为我可以看到所有输出都没有。
#include <iostream>
enum integerState{belowTen,aboveNine};
enum parity{even,odd};
integerState process_integer(unsigned int n);
parity even_or_odd(unsigned int n);
int main(){
unsigned int lowerLim,upperLim;
std::cin >> lowerLim >> upperLim;
for (unsigned int i=lowerLim;i<=upperLim;++i){
process_integer(i);
}
return 0;
}
integerState process_integer(unsigned int n){
switch(n){
case 1: std::cout << "one" << std::flush; return belowTen;
case 2: std::cout << "two" << std::flush; return belowTen;
case 3: std::cout << "three" << std::flush; return belowTen;
case 4: std::cout << "four" << std::flush; return belowTen;
case 5: std::cout << "five" << std::flush; return belowTen;
case 6: std::cout << "six" << std::flush; return belowTen;
case 7: std::cout << "seven" << std::flush; return belowTen;
case 8: std::cout << "eight" << std::flush; return belowTen;
case 9: std::cout << "nine" << std::flush; return belowTen;
default:
if(even_or_odd(n)==even){ std::cout << "even" << std::flush; return aboveNine;}
if(even_or_odd(n)==odd){ std::cout << "odd" << std::flush; return aboveNine;}
return aboveNine;
}
}
parity even_or_odd(unsigned int n){
return (n%2==0 ? even:odd);
}
如果重要的话我会使用g ++。
由于