1.scanf()
scanf()函數返回成功讀入的項目的個數。如果它沒有讀取任何項目(當它期望一個數字而您卻鍵入了一個非數字字符串時就會發生這種情況),scanf()會返回值0。當它檢測到“文件結尾”(end of file)時,它返回EOF(EOF是在文件stdio.h中定義的特殊值。一般,#define指令把EOF的值定義爲-1)。我們可以利用scanf()的返回值在if語句和while語句中檢測和處理不匹配的輸入。
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)){
//輸入非數字字符串或EOF就會結束循環,windows標準輸入EOF爲ctrl+c
//while(scanf("%d",&n) && n) 若輸入0也會結束循環
cout << n << endl;
}
return 0;
}
2.cin>>
>>運算符用來從一個istream對象讀取輸入數據,cin是一個istream對象。cin>>a的含義是從標準輸入中讀取a,他的返回值是一個“已經讀取了a的新流”,然後從這個新流中繼續讀取下個值。與scanf()類似,當讀取不匹配類型的值或EOF時會造成流錯誤而結束循環。
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin >> n && n){
//輸入非數字字符串或EOF或0結束循環
cout << n << endl;
}
return 0;
}
3.getline()
定義在頭文件<string>中,格式(簡化):getline( input, str, delim );
參數:
input | - | 獲取數據來源的流 |
str | - | 放置數據的目標 string |
delim | - | 分隔字符,默認爲'\n' |
返回值與cin>>相同。
注意:
在空白符分隔輸入後立即使用時,例如在 int n; std::cin >> n; 後,getline會用 operator>> 消耗掉留在輸入流上的換行符,並立即返回。常用解決方案是在切換到面向行輸入前,用 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 忽略輸入行上所有剩下的字符。