繁体   English   中英

函数调用后std :: cout的奇怪行为

[英]Strange behaviour of std::cout after function call

我有一个简单的程序,设置unsigned int变量。 好吧,我有一个问题。 std::cout工作正常,直到InputCLI

当调试器到达包含std::cout行时,第一次打印行

 std::cout << "debugNumber" << debugNumber; 

InputCLI调用程序打印行仅用\\ n直到它到达std::cin运算符。 怎么了?

我在Eclipse(Linux)中编码。 std::cin >> wait;之前的那一刻std::cin >> wait; 执行了:

在此输入图像描述

#include <iostream>
#include <limits>

unsigned int InputCLI(unsigned int& x);
int main() {
    int wait;
    unsigned int debugNumber = 0;
    std::cout << "debugNumber " << debugNumber;
    std::cout << "Enter debug number\n";
    InputCLI(debugNumber);
    std::cout << "debugNumber\n";
    std::cout << "debugNumber " << debugNumber;
    if (debugNumber == 6) {
        std::cout << "bubu";
    }
    std::cin >> wait;
    return 0;
}

unsigned int InputCLI(unsigned int& x) {
    if (std::cin >> x, std::cin.fail()) {
        if (std::cin.bad() || std::cin.eof())
            return -1;
        std::cin.clear();
        std::cin.ignore(std::numeric_limits < std::streamsize > ::max(), '\n');
        return -2;
    }
    return 0;
}

如果我不添加\\ n或std :: endl std :: cout将缓冲数据?

对,就是这样。

std::flush显式刷新流。 '\\n'本身不会在C ++级别进行任何刷新,但可能会触发较低级别的刷新。 std::endl打印'\\n'然后执行std::flush

当然,没有任何这些,你实际上不能期望在你的std::cin之前刷新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM