c++中輸入字串--cin.get和cin.getline用法
c++中cin輸入字串,這個跟java中的scanner物件有點像,今天來說一說cin中get()和getline()用法。首先先說一下兩者的區別:
1、getline()在輸入結束後丟棄換行符,在儲存字串時用空字元來替換換行符,也就是‘\0’。而get()將換行符保留在輸入佇列中。
2、getline()裡面必須包含兩個引數,陣列名和長度。而get()引數可以為空,引數為空時,讀取一個字元。也可以有兩個和getline()一樣的引數。
看一段程式:
我們輸入和輸出的結果是:const int size = 20; char a[size],b[size]; cin.getline(a,size); //輸入a cout<<a<<endl; cin.getline(b,size); //輸入b cout<<b<<endl; cin.get(a,size); //輸入a cout<<a<<endl; cin.get(b,size).get(); //這行cin取到的是回車鍵,也就是換行符 cout<<b<<endl; system("pause"); //保證程式執行結束後不會閃退 return 0;
程式解讀:定義兩個char型的陣列,我們都知道char陣列可以儲存字串。在程式中用cin.getline(a,size)來向陣列a中寫資料,輸入ab s,然後列印。這個沒什麼說的,注意的就是getline中的引數,第一個是陣列的名,第二個是允許讀入的字串的長度。下面輸入b,跟這個一樣。
在後面我們用get()向陣列中寫資料就會出現問題。在呼叫cin.get(a,size)後,螢幕錄入資料af d,然後回車。我們發現cin.get(b,size).get(),這行並沒有執行。原因:由於在呼叫cin.get(a,size)之後我們要輸入一個回車,在呼叫cin.get(b,size).get()時,系統預設將回車看做他的輸入,因此直接呼叫了cout<<b<<endl;輸出b。最後system("pause")是保證程式執行結束後不會閃退。
這裡說一下cin.get(b,size).get()這句話。cin.get(b,size)結束後返回一個cin的物件,用這個物件在呼叫get()方法,能夠處理回車鍵的麻煩。其實這條語句可以用兩條語句來解釋:
cin.get(b,size);
cin.get();
這樣做的效果是一樣的。只是將輸入結束後的回車鍵另做處理。
這裡在額外的說一下java中的scanner,如果定義一個scanner物件,例如
Scanner sc = new Scanner(System.in); int a = sc.nextInt(); String s = sc.nextLine(); System.out.println(a + s);
程式輸入4然後回車會直接輸出4。這個跟c++中的是一個道理,程式把輸入4後的回車當成了一個字串。