今天抱着試試的心態參加學校「ACM」預先賽,想着要用前幾天剛學的C++試試,沒想到卻讓一個小問題把我給卡住了,三道題只作出了一道,其它兩道不是算法不知道,而是編程語言不熟悉致使的,以爲好惋惜!html
先看今天的代碼,我要先從控制檯輸入一個整數n,再輸入n個字符串。算法
// NO2.cpp // 展現一個C++控制檯輸入的錯誤。 // 做者:曾賽 #include #include int main() { using std::cout; using std::cin; using std::string; using std::endl; cout << "Input num:"; int num(0); cin >> num; cout<<"Input st:"; string st ; getline(cin,st); cout<< st << endl; }
輸出以下:編程
Input num:3編程語言
Input st:函數
press a key to continue...spa
問題:程序運行很奇怪,在輸入一個整數以後就沒法輸入字符串了。code
解決方案:是 cin 的問題。修正後的代碼以下:
htm
// NO2.cpp // 展現一個C++控制檯輸入的錯誤。 // 做者:曾賽 #include #include int main() { using std::cout; using std::cin; using std::string; using std::endl; cout << "Input num:"; int num(0); cin >> num; // 消除上一次輸入對下一次輸入的影響 cin.ignore(); cout<<"Input st:"; string st ; getline(cin,st); cout<< st << endl; }
小知識:blog
Cin.ignore()方法cin.ignore( 5, 'c' ) 的是從輸入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每拋棄一個字符,它都要計數和比較字符:若是計數值達到5或者被拋棄的字符是'c',則cin.ignore() 函數執行終止;不然,它繼續等待。 它的一個經常使用功能就是用來清除以回車結束的輸入緩衝區的內容,消除上一次輸入對下一次輸入的影響。好比能夠這麼用:cin.ignore( 1024, '\n' );,一般把第一個參數設置得足夠大,這樣實際上老是隻有第二個參數 '\n' 起做用,因此這一句就是把回車(包括回車)以前的因此字符從輸入緩衝(流)中清除出去。ci
更多關於 cin 的詳細信息:http://hi.baidu.com/ttvid/blog/item/d38dd85821890281800a1822.html