std :: flush不起作用,而std :: endl

时间:2017-07-30 21:34:31

标签: c++ g++

我有一个非常简单的程序只需要两个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 ++。

由于

0 个答案:

没有答案