輸入資料時希望有個合法性檢驗的問題,如果輸入的資料不合法則程式提示重新輸入。最初**如下:
#include #include using std::cin ;
using std::cout ;
using std::endl;
using std::vector ;
int main()
{ int num;
vectorivec;do{
cout<<"please enter some numbers:"<>num)
ivec.push_back(num);
if(ivec.size()==0)
cout<<"error!"<
這樣寫如果第一次正確輸入,程式執行正確。但如果第一次沒有輸入有效字元(比如輸入ctrl+z,回車)或者第乙個輸入為非法字元,則程式陷入死迴圈,不停的輸出提示資訊,但是不允許使用者再次輸入。(注意,ctrl+z表示檔案結束,當輸入其後,並按下回車,cin>>不會讀取,並且清空輸入快取)
正確寫法:
#include #include using std::cin ;
using std::cout ;
using std::endl;
using std::vector ;
int main(){
int num;
vectorivec;
do{
cout<<"please enter some numbers:"<>num)
ivec.push_back(num);
//增加了兩行
cin.clear();
cin.ignore();//使用cin.sync()在vs中會無效
if(ivec.size()==0)
cout<<"error!"《在錯誤**中,如果一開始就輸入了乙個字元而不是數字,那麼推出while()迴圈,且cin.badbit置位置,下次無法輸入,如果加入了cin.clear(),清楚了badbit,但是緩衝區第乙個任然是乙個字元,下次又會退出while()迴圈,因此要加入cin.clear()和cin,ignore().
注意:1.cin>>不讀取空格以及回車,除非加入 cin>>noskipws>>num;
2.當按下ctrlz+z再按下回車的時候,因為ctrl+z是檔案結束,所以會清除緩衝區,到了cin.ignore()的時候,現在緩衝區是空的,所以在這裡需要等待我們輸入
C語言學習總結 一 關於變數型別
c語言變數等級 auto static external static external register auto 區域性變數 auto 變數是用堆疊 stack 方式占用儲存器空間,因此,當執行此區段是,系統會立即為這個變數分配儲存器空間,而程式執行完後,這個堆疊立即被系統收回 在大括號 內宣告...
關於C 中的cin的一點理解
作為一名初學者,常常會遇到用命令列,進行輸入的情況,往往輸入的是字元或者數字。一開始的時候,我們首先接觸的是,int i 0 cin i 這樣的 其實cin 本身也蠻好的,就是不能輸入帶空格的,這個運算子遇到空格會停止取值。字串的儲存往往通過string和char陣列。和這兩個相關的cin函式有ge...
(2)C 的第一步(HelloWorld)
讀書期間每次都喜歡用這一句話來自嘲自己的學習成果和能力,那就是我精通各種語言版本的helloworld 不知道其他的朋友有沒有和我相似的行為?那麼今天我們從簡單的helloworld程式來初窺c 的獨特魅力吧!上 例一 includeusing namespace std int main 例二 1...