今天寫代碼遇到了 一點點困惑,題目要求大致為:
輸入一串數字(包含一些空格)當鍵入回車時計算出輸入數字的和
其實現代碼如下:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a; 7 int sum; 8 9 while(cin>>a) 10 { 11 sum+=a; 12 while(cin.peek()==' ')//觀測到當前字符為空格的話 13 { 14 cin.get(); //從流中提取當前的空格 15 } 16 17 if(cin.peek()=='\n') //觀測到當前字符為換行符的話直接終止 18 break; 19 } 20 21 cout<<"結果是:"<<sum<<endl; 22 return 0; 23 24 }
程序里用到了cin.peek()和cin.get(),順便學習一下這兩個的用法:
參考博文傳送門:http://c.biancheng.net/cpp/biancheng/view/2231.html
https://blog.csdn.net/ReCclay/article/details/60782267
下面是我對於這兩個函數用法的一個簡單輸出測試:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a; 7 int b; 8 int c; 9 while(cin>>a) 10 { 11 b+=a; 12 while(cin.peek()==' ') //探測到空格 13 { 14 c=cin.get(); //這里是提取出空格 15 cout<<"a="<<a<<endl ; 16 } 17 if(cin.peek()=='\n') 18 { 19 break; 20 } 21 22 } 23 cout<<"和為:"<<b<<endl; 24 cout<<"c = "<<c<<endl; 25 }
測試輸入輸出結果為:【輸入為1 2 3 4 5】
【輸入為12 13 14 2 3】
這里c其實是提取出的空格的ASCII碼,所以是32,而至於a則是每次提取提取出的數字。
cin.get()
函數是cin輸入流對象的成員函數,它有3種形式:無參數的,有一個參數的,有3個參數的。
無參數的類似於C語言中的getchar(),從制定的輸入流中提取一個字符。C語言中的getchar函數與流成員函數cin.get( )的功能相同,C++保留了C的這種用法,可以用getchar(c)從鍵盤讀入一個字符賦給c。
無參數用來從指定的輸入流中提取一個字符(包括空白字符),函數的返回值就是讀入的字符。 若遇到輸入流中的文件結束符,則函數值返回文件結束標志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考慮到不與字符的ASCII代碼混淆,但不同的C ++系統所用的EOF值有可能不同。
有一個參數:
cin.get(ch)
其作用是從輸入流中讀取一個字符,賦給字符變量ch。如果讀取成功則函數返回true(真),如失敗(遇文件結束符) 則函數返回false(假)。
有兩個參數:
cin.get(字符數組, 字符個數n, 終止字符)
或
cin.get(字符指針, 字符個數n, 終止字符)
其作用是從輸入流中讀取n-1個字符,賦給指定的字符數組(或字符指針指向的數組),如果在讀取n-1個字符之前遇到指定的終止字符,則提前結束讀取。如果讀取成功則函數返回true(真),如失敗(遇文件結束符) 則函數返回false(假)。
傳送門:http://c.biancheng.net/cpp/biancheng/view/2231.html
https://blog.csdn.net/ReCclay/article/details/60782267
cin.peek()
cin.peek() 其返回值是一個char型的字符,其返回值是指針指向的當前字符,
但它只是觀測,指針仍停留在當前位置,並不后移。如果要訪問的字符是文件結束符,則函數值是EOF(-1)
1 #include <iostream> 2 using namespace std; 3 int main () 4 { 5 char c; 6 int n; 7 char str[256]; 8 cout << "Enter a number or a word: "; 9 c=cin.peek(); 10 if ( (c >= '0') && (c <= '9') ) 11 { 12 cin >> n; 13 cout << "You have entered number " << n << endl; 14 } 15 else 16 { 17 cin >> str; 18 cout << " You have entered word " << str << endl; 19 } 20 return 0; 21 }