日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c语言cin输入数组,C++基础:各种输入方法总结cin.get()、

發布時間:2025/3/11 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言cin输入数组,C++基础:各种输入方法总结cin.get()、 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:C++基礎:各種輸入方法總結cin.get()、

在C++中,各種輸入方法還是不少的,而且各有所異,本文做一點簡要總結,主要涉及如下內容:cin、cin.get()、cin.getline()、getline()、gets()、getchar()。

輸入原理簡述:

程序的輸入都建有一個緩沖區,即輸入緩沖區。每次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的數據存入輸入緩沖區,而cin函數直接從輸入緩沖區中取數據。正因為cin函數是直接從緩沖區取數據的,所以有時候當緩沖區中有殘留數據時,cin函數會直接取得這些殘留數據而不會請求鍵盤輸入。

比如下面的例子:

1

2

3

4

5

6

7

8

9

void test_input()

{

string str;

cout<

cin>>str;

cout<

cin>>str;

cout<

}

由于cin在遇到空格時,就會停止輸入,所以如果我在第一次輸入時,利用空格隔開兩個字符串,那么cin在第一次取的時候,只會讀取前一個字符串,到空格結束,此時緩沖區還保留著前面輸入的第二個字符串,那么第二次cin就會直接從緩沖區取殘留數據,而不會請求輸入。

當然對于以上的情況,也有解決的方案,那就是在第二次調用cin>>str,之前通過cin.sync()來清空輸入緩沖區,看一下下面的例子,此處不贅述:

1

2

3

4

5

6

7

8

9

10

void test_input()

{

string str;

cout<

cin>>str;

cin.sync();

cout<

cin>>str;

cout<

}

各種輸入方法簡介:

1、cin>>

根據cin>>sth 中sth的變量類型讀取數據,這里變量類型可以為int,float,char,char*,string等諸多類型。這一輸入操作,在遇到結束符(Space、Tab、Enter)就結束,且對于結束符,并不保存到sth中。

1

2

3

4

5

6

7

8

9

10

void test_input()

{

char ch1[10],ch2[10];

cout<

cin>>ch1;

cin>>ch2;

cout<

cout<

cout<

}

2、cin.get(字符數組名,接收長度,結束符)

其中結束符意味著遇到該符號結束字符串讀取,默認為ENTER,讀取的字符個數最多為(長度-1),因為最后一個為”n”。要注意的是,cin.get()操作遇到結束符停止讀取,但并不會將結束符從緩沖區丟棄。cin.get()有如下幾種用法:

(1)接收一個字符ch=cin.get()或cin.get(char ch),二者等價,看兩個例子

1

2

3

4

5

6

7

8

9

void test_input()

{

char ch1,ch2;

cout<

cin.get(ch1);//或ch1 = cin.get();

cin.get(ch2);

cout<

cout<

}

來看幾組測試:

連續輸入ab[enter],結果正常,ch1,ch2分別讀取了a、b,將其輸出,然后在輸出其ASCII值。要注意的是,以上輸入并讀取后,緩沖區中依然存在[Enter]沒有被刪除。

輸入a[Space]b[Enter],結果在輸出時,只看到了a,輸出ASCII值時候分別為97 32(空格的ASCII值),這就說明cin.get()并不會舍棄Space,依然會將其讀取進去,并加以顯示等操作。

輸入a[Enter],輸出見下圖。在輸出a之后,第二次的輸出產生了換行的效果,而輸出的第二個ASCII值為10(Enter的ASCII值),這就進一步響應了前面說到的cin.get()遇到結束符并不會將之刪除。

(2)接收一定長度的字符串cin.get(字符數組名,接收長度,結束符),結束符為可選參數,默認為Enter,可以接受Space 、Tab,對于結束符的處理要注意,結束符并不會丟掉,同樣看幾個例子。

對于如下代碼,所做的操作時,在不遇到enter時最多讀入(6-1)=5個字符到ch2中,然后讀入下一個字符到ch1中,顯示ch2,ch1以及其ASCII碼值。附上幾組測試:

1

2

3

4

5

6

7

8

9

void test_input()

{

char ch1,ch2[10];

cout<

cin.get(ch2,6);//在不遇到結束符的情況下,最多可接收6-1=5個字符到ch2中,注意結束符為默認Enter

cin.get(ch1);//或ch1 = cin.get();

cout<

cout<

}

輸入:zifuchuan[Enter],由于輸入長度大于(6-1)=5,所以會首先讀入“zifuc”到ch1,此時“huan”仍在緩沖區,當執行cin.get(ch1)會直接從緩沖區讀入h,而不需要申請從鍵盤輸入,看一下結果,符合分析。

輸入:zifu[Enter],此時輸入長度小于5就遇到了默認結束符Enter,則ch2中只讀入“zifu”,要注意的是,輸入緩沖區里面的Enter還在,所以接下來要讀入的ch1的內容將是Enter,而輸出時將看到換行,ASCII碼值為10,見下圖

輸入:zi fuchuan[Enter],注意中間的空格,cin.get()對空格并不敏感,依然會讀入,故而ch2讀入的是“zi fu”,ch1讀入的是c

(3)cin.get( ),注意此時沒有參數可用于舍棄輸入流中的不需要的字符,或者舍棄回車,彌補cin.get(字符數組名,字符數目,結束符)的不足。對(2)中的代碼加入一句話cin.get()如下:

1

2

3

4

5

6

7

8

9

10

void test_input()

{

char ch1,ch2[10];

cout<

cin.get(ch2,6);//在不遇到結束符的情況下,最多可接收6-1=5個字符到ch2中

cin.get();//注意:前面兩句可以寫到一塊:cin.get(ch2,6).get();

cin.get(ch1);//或ch1 = cin.get();

cout<

cout<

}

前面遇到的一個狀況是,輸入字符后,其結束符(如默認的Enter)會保留在緩沖區中,當下次讀入時,又會再讀入,此時就可以用到cin.get()獨釣輸入緩沖區不需要的字符,如:輸入:zi[Enter],由于遇到結束符,所以ch2內容為zi,此時輸入緩沖區還存在著[Enter],但cin.get()將其舍棄掉之后,cin.get(ch1)就會申請從鍵盤輸入內容,如下所示:

3、cin.getline(字符數組名,接收長度,結束符)

其用法與cin.get(字符數組名,接收長度,結束符)極為類似。cin.get()當輸入的字符串超長時,不會引起cin函數的錯誤,后面若有cin操作,會繼續執行,只是直接從緩沖區中取數據。但是cin.getline()當輸入超長時,會引起cin函數的錯誤,后面的cin操作將不再執行。如下代碼:

1

2

3

4

5

6

7

8

9

void test_input()

{

char ch1,ch2[10];

cout<

cin.getline(ch2,6);//在不遇到結束符的情況下,最多可接收6-1=5個字符到ch2中

cin>>ch1;

cout<

cout<

}

測試:如下圖,輸入zifuchuan[Enter],長度大于最大長度5,就會導致cin函數錯誤,其后既沒有像cin.get()一樣直接從輸入緩沖區直接讀數據,也沒有從鍵盤輸入。所以此處可以注意,考慮在用cin.getline()時,適度設置其最大接受長度大一點。

4、getline(istream is,string str,結束符)

同樣,此處結束符為可選參數(默認依然為Enter)。然而,getline()與前面的諸多存在的差別在于,它string庫函數下,而非前面的istream流,所有調用前要在前面加入#include。與之對應這一方法讀入時第二個參數為string類型,而不再是char*,要注意區別。另外,該方法也不是遇到空格就結束輸入的。

1

2

3

4

5

6

7

void test_input()

{

string str;

cout<

getline(cin,str,'a');

cout<

}

通過以上第二個圖還可以看出,這一方法只有在遇到結束符(此處為‘a’)才結束,對空格甚至回車都不敏感。

5、gets(char *ch)

gets()方法同樣接受一個字符串,但是與getline()不同,它的參數為char*,而不是string,另外若定義char ch[n],長度為n,則樣注意輸入的字符串長度不要大于n,否則會報錯。同樣gets()對空格也不敏感。

1

2

3

4

5

6

7

void test_input()

{

char ch[10];

cout<

gets(ch);

cout<

}

好吧,就到這里吧,其實還有getchar()、getch()等,這里就不一一贅述了。

現在有很多小伙伴在自學,但是一個人的能力總是有限的,遇到問題沒人幫你解決,平時提供大家一起學習C++,每天免費C++課程知識講解。我們有一個C++的學習交流qq群,點擊鏈接加入群【https://jq.qq.com/?_wv=1027&k=424tWQd】學習返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的c语言cin输入数组,C++基础:各种输入方法总结cin.get()、的全部內容,希望文章能夠幫你解決所遇到的問題。

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