您好,登錄后才能下訂單哦!
說明:流輸入運算符,在一定程度上為C++程序的開發提供了很多便利,我們可以避免C語言那種繁瑣的輸入格式,比如在輸入一個數值時,還需指定其格式,而cin以及cout則不需要。但是cin也有一些缺陷,比如當輸入字符串時,遇到空格便截止,舉個例子,如下,我們在輸入“12 23.5 aa bb cc dd”,希望打印出的是前兩個數值以及后面一個字符串“aa bb cc dd”,但實際打印出來的只有前兩個數字和“aa”。
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int a; 6 double b; 7 string buf; 8 cin>>a>>b>>buf; 9 //讀入字符串時遇到空格則止 12 23.5 aa bb cc dd 10 11 cout<<a<<endl; 12 cout<<b<<endl; 13 cout<<buf<<endl; 14 return 0; 15 } 16
為了解決諸多如此類的問題,于是C++提供了cin不可或缺的成員函數。具體用法及區別一一列舉如下。
?
1.char get() 讀入一個字符并返回(包括回車;tab;空格等空白字符)
示例1:
1 int main() 2 { 3 char ch; 4 5 //EOF為文件結束符,在windows系統下,用ctrl+z輸入EOF,在linux環境下為ctrl+d 6 while((ch = cin.get()) != EOF) 7 cout<<ch; 8 return 0; 9 }
注意:此程序在運行后,可以在鍵盤上任意輸入,屏幕將顯示輸入的所有內容,當輸入文件結束符時,退出程序。(所有示例應包含<iostream>頭文件,并且使用命名空間std,此處略,詳見說明部分程序。下同)
?
2.istream& get(char&) 讀入一個字符,讀取成功返回非0,讀取失敗(比如遇到文件結束符)返回0值
示例2:
1 int main() 2 { 3 char ch; 4 5 //get函數返回的是istream&,可實現鏈式編程 6 while(cin.get(ch)) 7 cout.put(ch); 8 return 0; 9 }
?
3. istream& get(char *, int ,char )
istream& get(字符指針,字符個數 n,終止字符)
功能:從輸入流中讀取n-1字符,賦給字符數組或字符指針所指向的數組。如果在讀取n-1個字符之前遇到終止字符,則提前結束。如果成功則返回非0,失敗則返回0。會清空char*指向的空間,未讀到n-1個字符或中止符,則會阻塞。不會越過中止符。在講這個成員函數之前,先說幾個簡單的cin的其他成員函數,以便于更好地闡述這個函數:
a.istream& ignore(streamsize n = 1, int delim= EOF);
功能:從當前指針位置開始,忽略n個字節字符,直到遇到delim停止,默認參數為忽略一個字節
b.int peek()
功能:用來查看當前指針所在位置,用完當前指針位置不發生變化。
c.istream& putback (char c);
功能:往當前指針位置插入一個char c;
示例3:
1 int main() 2 { 3 char ch[20]; 4 5 //鍵盤輸入i like c/i like c++ also/ 6 cin.get(ch,20,'/'); 7 cout<<"the first part is:"<<ch<<endl<<endl; 8 9 //查看當前指針所在位置 10 char peek = cin.peek(); 11 cout<<"the peek is:"<<peek<<endl<<endl; 12 13 //忽略'/'這個字符 14 cin.ignore(1,'/'); 15 //往當前指針位置插入一個char 16 cin.putback('a'); 17 18 peek = cin.peek(); 19 cout<<"the peek is:"<<peek<<endl<<endl; 20 21 cin.get(ch,20,'/'); 22 peek = cin.peek(); 23 cout<<"the second part is:"<<ch<<endl<<endl; 24 cout<<"the peek is:"<<peek<<endl<<endl; 25 return 0; 26 }
程序運行結果:
?
4.istream& getline(char *p, int n, char c)
cin.getline(字符數組或字符指針,字符個數 n,[終止字符])
功能:與帶三個參數的get()功能類似,從輸入流中讀取n-1字符,賦給字符數組或字符指針所指向的空間。如果在讀取n-1個字符之前遇到終止字符(如果不寫,默認為’\n’),則提前結束。會清空char*指向的空間,未讀到n-1個字符或中止符,則會阻塞,會越過中止符。
?
示例3:
1 int main() 2 { 3 char str[1024];
4 //此處輸入同上,為i like c/i like c++ also/ 5 //輸入20個字符,遇到'/'截止,會越過終止符,不需手動忽略, 6 //如果不寫終止符,默認為'\n'
7 cin.getline(str,10,'/'); 8 cout<<str<<endl; 9 cin.getline(str,10,'/'); 10 cout<<str<<endl; 11 return 0; 12 }
程序運行結果:
?
需要注意的是:
get和getline最大的區別就是,get遇到界定符時,停止執行,但并不從流中提取界定符,再次調用會遇到同一個界定符,函數將立即返回,不會提取輸入。getline則不同,它將從輸入流中提取界定符,但傷然不會把它放到緩沖區中。簡單來說就是前者不會自動忽略界定符,而后者會。
?
5.ostream put(char p)
功能:輸出一個字符,返回值為ostream類型,可實現鏈式編程
示例:
1 int main() 2 { 3 char str[] = "programming with with C++"; 4 for(unsigned int i = 0;i <sizeof(str)/sizeof(str[0]);i++) 5 { 6 //輸出一個字符,返回類型為ostream,以實現再次調用(如下) 7 cout.put(str[i]).put('x'); 8 } 9 return 0; 10 }
程序運行結果:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。