日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++最全输入方式总结(cin、get、getchar、getline)

發布時間:2025/3/15 c/c++ 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。