聊大 網(wǎng)站設(shè)計seo優(yōu)化主要做什么
前言:前面學習了while語句后,下面用while語句實現(xiàn)一個重要的功能,逐字符的讀取鍵盤輸入的字符序列,并輸出到顯示屏上。
準備知識:
C++的輸入輸出包含以下3方面的內(nèi)容:
- 對系統(tǒng)指定的標準設(shè)備的輸入和輸出。即從鍵盤輸入數(shù)據(jù),輸出到顯示器屏幕。這種輸入輸出稱為標準的輸入輸出,簡稱標準I/O。
- 以外存為對象進行輸入和輸出。例如從磁盤文件輸入數(shù)據(jù),數(shù)據(jù)再輸出到磁盤文件。以外存文件為對象的輸入輸出稱為文件的輸入輸出,簡稱文件I/O。
- 對內(nèi)存中指定的空間進行輸入和輸出。通常指定一個字符數(shù)組作為存儲空間(實際上可以利用該空間存儲任何信息)。這種輸入輸出稱為字符串輸入輸出,簡稱串I/O。
目錄
1. 方法一
2. 方法二
3. 方法三
4. iostream類的成員函數(shù)get
重載函數(shù)1:int get();
重載函數(shù)2:int get(char&?ch);
cin.get(ch)與cin.get()對比
1. 方法一
使用cin對象和流提取運算符“>>”讀取。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{char ch;int count = 0;cout << "Enter characters, enter # to quit: \n";cin >> ch;while (ch != '#'){cout << ch;count++;cin >> ch;}cout << endl << count << " characters read\n";return 0;
}
程序分析:程序功能是逐個讀取輸入的文本并在遇到'#'字符時停止讀取輸入。結(jié)束循環(huán)的條件是最后讀取的一個字符是'#',該條件通過在循環(huán)之前讀取一個字符進行初始化,并在循環(huán)體結(jié)尾讀取下一個字符進行更新。輸出如下:?
?從輸出結(jié)果看,程序讀取到了'#'前除空格以外的所有字符,總共檢測了14個字符,有4個空格被忽視了。原因在于cin讀取char值時與讀取其他基本類型一樣,cin將忽略空格和換行符。
另外,程序為何可以輸入一串字符序列,而不是單個字符,并且程序輸入'#'字符后為何還可以輸入字符。這是因為鍵盤輸入的文本內(nèi)容會先被cin對象存放在緩沖區(qū),當用戶按下回車鍵后他輸入的內(nèi)容才會發(fā)送給程序,當一串字符序列發(fā)送給程序后,程序再逐個字符的檢測是否為'#'字符,如果是'#'字符,就退出循環(huán)并輸出檢測過的所有字符。
2. 方法二
使用iostream類的成員函數(shù)get()逐字符的讀取字符序列可以避免方法一中忽視空格的問題。
將方法一中的代碼修改如下:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{int count = 0;cout << "Enter characters, enter # to quit: \n";char ch = cin.get();while (ch != '#'){cout << ch;count++;ch = cin.get();}cout << endl << count << " characters read\n";return 0;
}
程序輸出如下,可見輸出結(jié)果中包含了字符序列中的空格,并且最終檢測的字符數(shù)目也包含了空格。
3. 方法三
還可以使用帶參數(shù)的get成員函數(shù):
#include <iostream>
#include <cstring>
using namespace std;
int main()
{int count = 0;cout << "Enter characters, enter # to quit: \n";char ch;cin.get(ch);while (ch != '#'){cout << ch;count++;cin.get(ch);}cout << endl << count << " characters read\n";return 0;
}
4. iostream類的成員函數(shù)get
get函數(shù)在iostream類中有多個重載函數(shù),本文主要介紹無參數(shù)的get函數(shù)和有一個參數(shù)的get函數(shù)。
重載函數(shù)1:int get();
無參數(shù)的get函數(shù),cin.get()表示從指定的輸入流(通常是鍵盤)中提取一個字符(包括空格),如果讀取成功,則函數(shù)的返回值就是讀入的字符,如果遇到文件結(jié)束符號(EOF),則返回EOF。
char ch;
ch = cin.get();
if (ch != EOF) {cout << "You entered: " << ch << endl;
} else {cout << "End of file reached." << endl;
}
重載函數(shù)2:int get(char&?ch);
有1個參數(shù)的get函數(shù),其形參是char類型的引用。cin.get(ch)表示從輸入流中讀取一個字符,并賦給字符變量ch,如果讀取成功則函數(shù)返回非0值(true),如失敗則函數(shù)返回0值(false)。cin.get(ch) 更適合用于需要明確知道讀取操作是否成功的場合。
char ch;
if (cin.get(ch)) {cout << "You entered: " << ch << endl;
} else {cout << "End of file reached." << endl;
}
cin.get(ch)與cin.get()對比
屬性 | cin.get(ch) | ch=cin.get() |
傳遞輸入字符的方式 | 賦給參數(shù)ch | 將函數(shù)返回值賦給ch |
用于字符輸入時函數(shù)的返回值 | istream類對象(執(zhí)行bool轉(zhuǎn)換后為true) | int類型的字符編碼 |
到達EOF時函數(shù)的返回值 | istream類對象(執(zhí)行bool轉(zhuǎn)換后為false) | EOF |
使用帶參數(shù)的get函數(shù)更符合對象方式,一方面因為其返回值是istream對象,意味著可以將它們拼接起來使用,另一方面還可以通過返回值判斷字符讀取是否成功。如將字符串"game"4個字符分別賦值給四個字符變量:ch1,ch2,ch3,ch4??梢杂萌缦滦问綄崿F(xiàn):
#include <iostream>
#include <cstring>
using namespace std;
int main()
{int count = 0;cout << "Enter characters, enter # to quit: \n";char ch1, ch2, ch3, ch4;cin.get(ch1).get(ch2).get(ch3).get(ch4);cout << "ch1="<<ch1 << "\n" << "ch2=" << ch2 << "\n" <<"ch3=" << ch3 << "\n" << "ch4=" << ch4 << "\n" << endl;return 0;
}
輸出如下:?
?