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