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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++输入cin详解

發布時間:2023/12/2 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++输入cin详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++輸入cin詳解

輸入原理:

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

#1:

#include <iostream>
using namespace std;//對于VC6等不支持命名空間的此語句需要去掉
int main()
{
char str[8];
cin.getline(str, 5);
cout<<str<<endl;
cin.getline(str, 5);
cout<<str<<endl;
return 0;
}

?

測試:

abcdefgh (回車)

abcd (輸出)?

(輸出-換行)

【分析】之所以第一次輸入完后直接程序就結束了,而不是進行第二次輸入,是因為第一次多輸入的數據還殘留在緩存區中,第二次輸入就直接從緩存區中提取而不會請求鍵盤輸入,以下探討幾種常見的輸入方式:

. cin>>

該操作符是根據后面變量的類型讀取數據。

輸入結束條件 :遇到Enter、Space、Tab鍵。

對結束符的處理 :丟棄緩沖區中使得輸入結束的結束符(Enter、Space、Tab)

#2

#include <iostream>
using namespace std;
int main()
{
char str1[10], str2[10];
cin>>str1;
cin>>str2;
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}

測試:

abcd efgh

輸出:

abcd

efgh

【分析】第一次讀取字符串時遇到空格則停止了,將abcd讀入str1,并舍棄了空格,將后面的字符串給了第二個字符串。這證明了cin讀入數據遇到空格結束;并且丟棄空格符;緩沖區有殘留數據,讀入操作直接從緩沖區中取數據。

二.cin.get(數組名,長度,結束符)

其中結束符為可選參數,讀入的字符個數最多為(長度-1)個,結束符規定結束字符串讀取的字符,默認為ENTER

若要讀取字符,直接cin.get(char ch)或ch=cin.get()即可

讀取字符的情況:

輸入結束條件:Enter鍵

對結束符處理:不丟棄緩沖區中的Enter

cin.get() 與 cin.get(char ch)用于讀取字符,他們的使用是相似的,

即:ch=cin.get() 與 cin.get(ch)是等價的。

#3

#include <iostream>
using namespace std;
int main()
{
  char c1, c2;
  cin.get(c1);
  cin.get(c2);
cout<<c1<<" "<<c2<<endl; // 打印兩個字符
cout<<(int)c1<<" "<<(int)c2<<endl; // 打印這兩個字符的ASCII值
return 0;
}

?

測試一輸入:

a[Enter]

輸出:

a

97 10

【分析】會發現只執行了一次從鍵盤輸入,顯然第一個字符變量取的’a', 第二個變量取的是Enter(ASCII值為10),這是因為該函數不丟棄上次輸入結束時的Enter字符,所以第一次輸入結束時緩沖區中殘留的是上次輸入結束時的Enter字符!

測試二輸入:

a b[Enter]

輸出:

a

97 32

【分析】顯然第一個字符變量取的’a', 第二個變量取的是Space(ASCII值為32)。原因同上,沒有丟棄Space字符。

讀取字符串的情況:

輸入結束條件:默認Enter鍵(因此可接受空格,Tab鍵),可在第三個參數上自定義結束符

對結束符處理:丟棄緩沖區中的Enter

#4

#include <iostream>
using namespace std;
int main ()
{
  char ch, a[20];
  cin.get(a, 5 , 'd');
  cin>>ch;
  cout<<a<<endl;
  cout<<(int)ch<<endl;
  return 0;
}

?

測試一輸入:

12345[Enter]

輸出:

1234

53

【分析】第一次輸入超長,字符串按長度取了"1234",而’5′仍殘留在緩沖區中,所以第二次輸入字符沒有從鍵盤讀入,而是直接取了’5′,所以打印的ASCII值是53(’5′的ASCII值)。

測試二輸入:

12d45[Enter]

輸出:

12

d

【分析】第二次輸出為d,說明自定義結束符時不丟棄緩沖區中的結束符

三.cin.getline()

cin.getline(數組名,長度,結束符) 大體與 cin.get(數組名,長度,結束符)類似。

區別在于:

cin.get()當輸入的字符串超長時,不會引起cin函數的錯誤,后面的cin操作會繼續執行,只是直接從緩沖區中取數據。但是cin.getline()當輸入超長時,會引起cin函數的錯誤,后面的cin操作將不再執行。

#5

#include <iostream>
using namespace std;
int main ()
{
  char ch, a[20];
  cin.getline(a, 5);
  cin>>ch;
  cout<<a<<endl;
  cout<<(int)ch<<endl;
  return 0;
}

?

測試輸入:

12345[Enter]

輸出:

1234

-52

【分析】與cin.get()的例子比較會發現,這里的ch并沒有讀取緩沖區中的5,而是返回了-52,這里其實cin>>ch語句沒有執行,是因為cin出錯了!cin的錯誤處理下次介紹。

轉載于:https://www.cnblogs.com/shsgl/p/4091140.html

總結

以上是生活随笔為你收集整理的C++输入cin详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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