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