C++最全输入方式总结(cin、get、getchar、getline)
目錄
寫在前面:
一、輸入方式
1.cin>>
2.cin.get()
3.cin.getline()
下面介紹幾個(gè)string的輸入:
4.getline()
5.gets()
6.getchar()
二、輸入控制
三、例子
寫在前面:
主要注意的包括以下幾個(gè)點(diǎn)(重要性不分先后):
1.輸入?yún)?shù)
2.結(jié)束標(biāo)志
3.是否會(huì)將沒輸入的繼續(xù)放在輸入流
4.返回值
5.針對(duì)字符、數(shù)字及字符、字符串的哪種情況
一、輸入方式
1.cin>>
1)最常見的是獲取輸入的一個(gè)字符或數(shù)字(后面會(huì)介紹只輸入字符的情況),如
int a,b;
cin>>a>>b;
注意:cin>>會(huì)自動(dòng)過濾掉不可見字符(如空格 回車 tab等)。
若不想過濾掉空白字符,可以用noskipws流進(jìn)行控制。如下程序,沒有過濾掉不可見字符,輸入的空格字符存入了input[1]中,也可輸出。
#include<iostream> using namespace std; int main() {int input[5];for (int i = 0; i < 5; i++) cin >> noskipws >> input[i];for (int i = 0; i < 5; i++)cout << input[i] << endl;system("pause");return 0; }2)獲取輸入的字符串,可以用數(shù)組或string類型。如
char a[20];cin>>a;cout<<a<<endl;或者string類型:
string s;cin>>s;cout<<s<<endl;?注意:遇到空格、回車等會(huì)結(jié)束獲取輸入的字符串,后面的字符串會(huì)過濾掉(存放在輸入流中)。如果后面還需要輸入字符串,則會(huì)從前面存放的字符串開始獲取。
比如將輸入存在一個(gè)數(shù)組中,中途若遇見空格,則只會(huì)將空格前面的內(nèi)容放入數(shù)組。
#include <bits/stdc++.h> using namespace std;int main() {int c[20];cin >> c;cout << c;system("pause");return 0; }2.cin.get()
此函數(shù)從輸入流中讀入一個(gè)字符(char 非int,如果定義數(shù)組或變量為int就會(huì)出錯(cuò)!),返回值就是該字符的 ASCII 碼。如果碰到輸入的末尾,則返回值為 EOF。
EOF 是 End of File 的縮寫。istream 類中從輸入流(包括文件)中讀取數(shù)據(jù)的成員函數(shù),在把輸入數(shù)據(jù)都讀取完后再進(jìn)行讀取,就會(huì)返回 EOF。EOF 是在 iostream 類中定義的一個(gè)整型常量,值為 -1。
get() 函數(shù)不會(huì)跳過空格、制表符、回車等特殊字符,所有的字符都能被讀入。
1)cin.get(字符變量名),用來接收字符,只獲取一個(gè)字符,可以接收空格,遇回車結(jié)束
#include <bits/stdc++.h> using namespace std;int main() {char c[20];for (int i = 0; i < 20; i++)cin.get(c[i]);for(int i =0; i < 20; i++)cout << c[i];system("pause");return 0; }2)cin.get(數(shù)組名,接收字符數(shù)目),用來接收字符串,可以接收空格,遇回車結(jié)束。
注意:數(shù)組的最后一個(gè)字符會(huì)是‘\0’,設(shè)接收字符數(shù)目為n,如果輸入的字符串大于等于n,則實(shí)際接收到的輸入是字符串的前面n-1個(gè)字符,包括空格(不包括回車,遇到回車就結(jié)束了),會(huì)自動(dòng)在后面增加一個(gè)‘\0’。所以預(yù)設(shè)數(shù)組大小時(shí)要比實(shí)際輸入大小大1.
注意:此時(shí)不需要循環(huán)輸入了!!!
#include <bits/stdc++.h> using namespace std;int main() {char c[3];cin.get(c, 3);cout << c; //輸出只會(huì)有2個(gè) 因?yàn)榻Y(jié)尾占位了system("pause");return 0; }3)cin.get(),沒有參數(shù),主要用于舍棄輸入流中不需要的字符,或者舍棄回車,即舍棄輸入流中的一個(gè)字符(注意!是緊接著的一個(gè)字符!)。
#include <bits/stdc++.h> using namespace std;int main() {char c[3], d[2];cin.get(c, 3);cin.get(d, 2);cout << c << endl;cout << d<< endl;system("pause");return 0; }沒有用cin.get(),則后面的3會(huì)從輸入流中繼續(xù)讀入
有cin.get(),則2后面的3被省略了。
#include <bits/stdc++.h> using namespace std;int main() {char c[3], d[2];cin.get(c, 3);cin.get();cin.get(d, 2);cout << c << endl;cout << d<< endl;system("pause");return 0; }3.cin.getline()
注意:這是讀取字符!后面還會(huì)介紹getline讀取字符串!別搞混了。
getline() 是 istream 類的成員函數(shù),它有如下兩個(gè)重載版本:
istream & getline(char* buf, int bufSize); istream & getline(char* buf, int bufSize, char delim);第一個(gè)版本從輸入流中讀取 bufSize-1 個(gè)字符到緩沖區(qū) buf,或遇到\n為止(哪個(gè)條件先滿足就按哪個(gè)執(zhí)行)。函數(shù)會(huì)自動(dòng)在 buf 中讀入數(shù)據(jù)的結(jié)尾添加\0。
第二個(gè)版本和第一個(gè)版本的區(qū)別在于,第一個(gè)版本是讀到\n為止,第二個(gè)版本是讀到 delim 字符為止。\n或 delim 都不會(huì)被讀入 buf,但會(huì)被從輸入流中取走。
這兩個(gè)函數(shù)的返回值就是函數(shù)所作用的對(duì)象的引用。如果輸入流中\(zhòng)n或 delim 之前的字符個(gè)數(shù)達(dá)到或超過 bufSize,就會(huì)導(dǎo)致讀入出錯(cuò),其結(jié)果是:雖然本次讀入已經(jīng)完成,但是之后的讀入都會(huì)失敗。
從輸入流中讀入一行,可以用第一個(gè)版本。用cin >> str這種寫法是不行的,因?yàn)榇朔N讀法在碰到行中的空格或制表符時(shí)就會(huì)停止,因此就不能保證 str 中讀入的是整行。
總結(jié)來說就是,接收一個(gè)字符串,可以接收空格等,最后一個(gè)字符為‘\0’。結(jié)束符可以通過設(shè)置第三個(gè)參數(shù)自己設(shè)置,默認(rèn)是回車。m不能為string類型。
經(jīng)常會(huì)遇到需要從輸入流中讀入一行的情況,可以用第一個(gè)版本,因?yàn)橐曰剀嚪麨榻Y(jié)束標(biāo)志。用cin >> str這種寫法是不行的,因?yàn)榇朔N讀法在碰到行中的空格或制表符時(shí)就會(huì)停止,因此就不能保證 str 中讀入的是整行。
1)cin.getline(變量名, 輸入大小)默認(rèn)結(jié)束方式
#include <bits/stdc++.h> using namespace std;int main() {char c[3];cin.getline(c, 3);cout << c << endl;system("pause");return 0; }2)自定義結(jié)束標(biāo)志
#include <bits/stdc++.h> using namespace std;int main() {char c[5];cin.getline(c, 5, '3');cout << c << endl;system("pause");return 0; }下面介紹幾個(gè)string的輸入:
4.getline()
注意:這不是cin.getline() !!!!!.
用于string類的。使用需包含頭文件#include<string>。getline(cin,string s),接收一個(gè)字符串,可以接收空格、回車等
與cin.getline()的區(qū)別:
? ? ? ? ? ? ? 1.cin.getline()接收輸入字符串的是數(shù)組,getline()是string類型。
? ? ? ? ? ? ? 2.cin.getline()可以接收空格,但不能接收回車;getline()可以接收空格和回車
? ? ? ? ? ? ? 3.cin.getline()會(huì)在數(shù)組結(jié)尾是'\0',getline()不會(huì)
// This program illustrates using the getline function //to read character data into a string object. #include <iostream> #include <string> // Header file needed to use string objects using namespace std;int main() {string name;getline(cin, name);cout << name << endl;return 0; }雖然getline也用了cin,但是他們存在區(qū)別:
cin與getline()的區(qū)別:
? ? ? ? ? ? ? ?getline()中的結(jié)束符,結(jié)束后,結(jié)束符不放入緩存區(qū);
? ? ? ? ? ? ? ?cin的結(jié)束符,結(jié)束后,結(jié)束符還在緩存區(qū);
?所以在使用 cin 后若要使用 getline() 必須要把前面cin遺留的結(jié)束符處理掉,解決方法為:在使用getline()之前,加入一行g(shù)etline()來處理cin留下的結(jié)束符;代碼如下:
#include <bits/stdc++.h> using namespace std; int main() {string str1;int x;cin>>x;getline(cin,str1);while(x--){getline(cin,str1);cout<<str1<<"\n";}return 0; }5.gets()
gets(m)用于string類的,需包含#include<string>。可以接收空格,遇回車結(jié)束。
#include <iostream> #include <cstring>//必須是cstring,否則strlen()方法不能用 #include <stdio.h> using namespace std;int main() {char a[40000];gets(a);//必須是char型數(shù)組,不能是其他類型數(shù)組int len=strlen(a);//得到char型數(shù)組的實(shí)際長(zhǎng)度//執(zhí)行其余操作return 0; }可用于多維數(shù)組。
#include<iostream>#include<string>using namespace std;main (){char m[3][20];for (int i = 0; i < 3; i++){cout << "\n請(qǐng)輸入第" << i + 1 << "個(gè)字符串:" << endl;gets_s(m[i]);}cout << endl;for (int j = 0; j < 3; j++) {int len = strlen(m[j]);//得到char型數(shù)組的實(shí)際長(zhǎng)度f(wàn)or (int k = 0; k < len; k++)cout << "輸出m[" << j << k << "]的值:" << m[j][k] << endl;}}6.getchar()
?m=getchar(),需包含#include<string>
getchar()是C語(yǔ)言中的函數(shù),C++中也包含了該函數(shù)。getchar()函數(shù)的作用是從標(biāo)準(zhǔn)的輸入stdin中讀取字符。也就是說,getchar()函數(shù)以字符為單位對(duì)輸入的數(shù)據(jù)進(jìn)行讀取。
在控制臺(tái)中通過鍵盤輸入數(shù)據(jù)時(shí),以回車鍵作為結(jié)束標(biāo)志。當(dāng)輸入結(jié)束后,鍵盤輸入的數(shù)據(jù)連同回車鍵一起被輸入到輸入緩沖區(qū)中。在程序中第一次調(diào)用getchar()函數(shù)從輸入緩沖區(qū)中讀取一個(gè)字節(jié)的數(shù)據(jù)。需要注意的是,如果此時(shí)在程序中第二次調(diào)用getchar()函數(shù),因?yàn)榇藭r(shí)輸入緩沖區(qū)中還有回車鍵的數(shù)據(jù)沒有被讀出,第二個(gè)getchar()函數(shù)讀出的是回車符。
getchar( )只能接收一個(gè)字符。getchar函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分。通常可以用它來解決多行輸入時(shí)存在的回車符(從流中取走回車符)
#include <stdio.h> #include<ctype.h> int main() {int N;int num[10000];int j = 0;do { //因?yàn)榈谝粋€(gè)是數(shù)字 第二個(gè)才是空格,所以用do 不然會(huì)丟失第一個(gè)數(shù)scanf_s("%d", &num[j++]);} while (getchar() != '\n');scanf_s("%d", &N);for (int i = 0; i < j; i++) {printf("%d ", num[i]);}return 0; }二、輸入控制
比如輸入進(jìn)制控制:
https://blog.csdn.net/qq_41687938/article/details/116713651?spm=1001.2014.3001.5501
其他一些十分經(jīng)典的使用方法及實(shí)例。
https://blog.csdn.net/qq_41687938/article/details/116535989?spm=1001.2014.3001.5501
三、例子
https://blog.csdn.net/qq_41687938/article/details/116535989?spm=1001.2014.3001.5501
總結(jié)
以上是生活随笔為你收集整理的C++最全输入方式总结(cin、get、getchar、getline)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php make test 作用,lar
- 下一篇: python while循环if_pyt