2 C 之cin(一) 關於合法性檢驗

2021-08-19 14:14:49 字數 1262 閱讀 1540

輸入資料時希望有個合法性檢驗的問題,如果輸入的資料不合法則程式提示重新輸入。最初**如下:

#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...