這個問題在這里已經有了答案: 為什么我們需要系結 std::cin 和 std::cout? (3 個回答) 當我使用 cout.tie(NULL) 時,程式不會為我的代碼列印任何內容,但如果我列印 endl,程式作業正常 2 個答案 ios_base::sync_with_stdio(false) 的意義;cin.tie(NULL); (5 個回答) 43 分鐘前關閉。
這個單一繼承代碼沒有錯誤,但是當我運行這個 void 時,函式void B::get_ab()會按預期首先執行,但是 function( cin>>a>>b;) 中的第二行首先執行,然后是第一行,有人知道這里發生了什么嗎?
#include<iostream>
#include<stdio.h>
using std::equal_range;
using std::lower_bound;
using std::upper_bound;
using std::pair;
using std::string;
using std::getline;
using std::vector;
using std::cout;
using std::ios;
using std::set;
using std::cin;
class B
{
int a;
public: int b;
void get_ab();
int get_a(void);
void show_a(void);
};
class D:private B{
int c;
public: void mult();
void display();
};
void B::get_ab()
{
cout<<"Enter values of a&b";
cin>>a>>b;
}
int B::get_a()
{
return a;
}
void B::show_a()
{
cout<<"a="<<a<<"\n";
}
void D::mult()
{
get_ab();
c=b*get_a();
}
void D::display()
{
show_a();
cout<<"b="<<b<<"\n"<<"c="<<c<<"\n";
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
D d;
d.mult();
d.display();
return 0;
}```
uj5u.com熱心網友回復:
這樣做的原因是您cin從 中解開cout了cin.tie(0);。您不能期望在程式提示用戶輸入之前重繪 輸出。
如果您出于某種原因需要保留此配置(即未系結的流)并且仍需要列印提示,則需要顯式重繪 輸出(例如,使用其中一個std::flush或std::endl I/O 操縱器)。
您可能需要檢查此執行緒:Force std::coutflush print to screen。
還有這個:為什么我們需要打std::cin領帶std::cout
uj5u.com熱心網友回復:
執行順序不是問題。這是關于輸出緩沖和重繪 的。
您應該明確重繪 提示輸出。
您可能不希望有換行符。您可以使用沒有換行符的顯式重繪 ,即
https://en.cppreference.com/w/cpp/io/manip/flush
uj5u.com熱心網友回復:
塔尼什克。我認為問題可能是這兩行代碼:
ios::sync_with_stdio(0);
cin.tie(0);
第二行允許 stdin 和 out 半獨立地運行,方法是不確保一個呼叫的緩沖區在另一個呼叫發生之前已被清空。我不認為繼承與它有任何關系。嘗試將它們注釋掉,看看會發生什么。
你為什么要使用它們?有一個很好的討論他們在這里做什么:
ios_base::sync_with_stdio(false) 的意義;cin.tie(NULL);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/472138.html
標籤:C
