在看《寫給大家看的C++》,其中要到些疑問,特來求助。
書上提到對cin物件的輸入檢查可以用
std::cin.ignore(100, '\n');
或 std::cin.ignore( std::cin.gcount() + 1 );
對緩沖區多于的內容進行洗掉。
但是,我用了兩次,發現都有一些小問題,讓我不得其解。
比如,在使用std::cin.ignore( std::cin.gcount() + 1 ); 這條陳述句時,有時候需要 +1 才能達到預想的效果,但有時候又不需要 +1。
我的疑問是:
1、 std::cin.ignore( std::cin.gcount() ); 這句陳述句會將這句之前輸入緩沖區都清空,包括清空最后一個回車嗎?若包括了,為什么會出現這句 std::cin.ignore( std::cin.gcount() + 1 ); 需要 +1 的陳述句。這兩句的區別在哪里?
3、 std::cin.ignore(100, '\n'); 的使用中,當遇到第一個'\n' 后,停止,那么這個'\n' 會被清除還是留在緩沖區了呢?
2、 輸入緩沖區和輸出緩沖區是相互獨立互不影響的嗎?
/********************************************************************************************************************************
以下是我的程式,std::cin.ignore(100, '\n'); 和 std::cin.ignore(std::cin.gcount() + 1); 在第一次輸入小樹的情況下,
執行結果不一樣,想請教下這兩句具體有什么不同。
********************************************************************************************************************************/
#include <iostream>
void PromptAndWait();
void DollarsToEuros(float rate, unsigned dollars);
void DollarsToEuros(float rate, float dollars);
int main(int argc, char** argv) {
float ConversionRate = 0.832339;
unsigned DollarsIn;
float DollarsInFloat;
std::cout << "Enter a US dollar amount (without the dollar sign, commas or a decimal):[####] ";
std::cin >> DollarsIn;
DollarsToEuros(ConversionRate, DollarsIn);
//std::cin.ignore(100, '\n');
std::cin.ignore(std::cin.gcount() + 1);
std::cout << "Enter a US dollar amount (without the dollar sign or commas):[####.##] ";
std::cin >> DollarsInFloat;
DollarsToEuros(ConversionRate, DollarsInFloat);
PromptAndWait();
return 0;
}
void PromptAndWait() {
std::cin.ignore(100, '\n');
std::cout << "Press Enter or Return to continue.\n";
std::cin.get();
} // End of the PromptAndWait() funcation.
void DollarsToEuros(float rate, unsigned dollars) {
std::cout.setf(std::ios_base::fixed);
std::cout.setf(std::ios_base::showpoint);
std::cout.precision(2);
std::cout << "\n$" << dollars
<< " US = " << (rate * dollars)
<< " Euros.\n\n";
} // End of the DollarsToEuros() funcation.
void DollarsToEuros(float rate, float dollars) {
std::cout.setf(std::ios_base::fixed);
std::cout.setf(std::ios_base::showpoint);
std::cout.precision(2);
std::cout << "\n$" << dollars
<< " US = " << (rate * dollars)
<< " Euros.\n\n";
} // End of the DollarsToEuros() funcation (overload).
uj5u.com熱心網友回復:
就是圖中紅色兩句的執行效果不一樣,還請大家多多指教!uj5u.com熱心網友回復:
在第一次輸入浮點數的情況下,結果不一樣!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/62960.html
標籤:基礎類
