簡體   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