C++讀入整行字符串的方法

 1 string s;  2 getline(cin,s);  3 cout<<s<<endl;  4 
 5 
 6 char s[100];  7 scanf("%[^\n]%*c",s);  8 printf("%s\n",s);  9 
10 
11 char s[100]; 12 gets(s); 13 printf("%s\n",s); 14 
15 
16 char s[100]; 17 cin.get(s,100); 18 printf("%s\n",s) 19 
20 
21 char s[100]; 22 cin.getline(s,100); 23 printf("%s\n",s);

 

 

下面介紹cin.get()和cin.getline()的區別:編程

 

可分爲三種狀況來看:
1)輸入的字符串不超過限定大小
get(str,Size):讀取全部字符,遇到'\n'時止,而且將'\n'留在輸入緩衝區中,其將被下一個讀取輸入的操做捕獲,影響該輸入處理;
getline(str,Size):讀取全部字符,遇到'\n'時止,而且將'\n'直接從輸入緩衝區中刪除掉,不會影響下面的輸入處理。
2)輸入的字符數超出限定的大小
        get(str,Size):讀取Size-1個字符,並將str[Size-1]置爲'\0',而後將剩餘字符(包括'\n')留在輸入緩衝區中,這些字符將被下一個讀取輸入的操做捕獲,影響該輸入處理;
        getline(str,Size):讀取Size-1個字符,並將str[Size-1]置爲'\0',剩餘字符(包括'\n')留在輸入緩衝區中,隨即設置cin實效位(即if(!cin)的判斷爲真),關閉輸入。其後的全部輸入都沒法獲得任何東西,固然也沒法獲得輸入緩衝區中剩餘的字符串。但若是象本例同樣用clear()重置cin,其後的輸入即可用並會獲得遺留在輸入緩衝區中的字符。
3)輸入一個空行(即直接回車)
        get(str,Size):str將獲得'\0',並設置cin實效位,關閉輸入,但回車依然留在輸入緩衝區中,所以若是咱們用clear()重置cin,其下一個讀取輸入的操做將捕獲'\n';
        getline(str,Size):str將獲得'\0',並將'\n'刪除掉,不置實效位,不關閉輸入。因此對於cin.getline來講空行是合法的輸入,且不會影響下面的輸入處理。
        至於使用那個更好,可能因人習慣不一樣而不一樣,仁者見仁智者見智。對於咱們編程來講,總但願能有更好的容錯性,即使用戶輸入了不合理的輸入,程序也應該可以 提示並可以從新輸入或繼續正常處理,而由於用戶的輸入問題而致使程序錯誤或其後的全部輸入都不可用顯然不是咱們但願的。使用get(str,Size)和 getline(str,Size),均可能碰到設置失效位,關閉輸入的狀況,故都是須要考慮到相應的防錯處理的。spa

 

 

參考資料:https://blog.csdn.net/yo_bc/article/details/72617275.net

相關文章
相關標籤/搜索