1. 程式人生 > >BellGrade的部落格 C++各種輸入流 一文

BellGrade的部落格 C++各種輸入流 一文

學C++的時候,這幾個輸入函式弄的有點迷糊;這裡做個小結,為了自己複習,也希望對後來者能有所幫助,如果有差錯的地方還請各位多多指教(本文所有程式均通過VC 6.0執行)

1cin
1cin.get()
2cin.getline()
3getline()
4gets()
5getchar()

附:cin.ignore();cin.get()//跳過一個字元,例如不想要的回車,空格等字元

1cin>>          

用法1:最基本,也是最常用的用法,輸入一個數字:

#include <iostream>
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

輸入:2[回車]3[回車]
輸出:5

注意:>> 是會過濾掉不可見字元(如 空格 回車,TAB 等)
cin>>noskipws>>input[j];//不想略過空白字元,那就使用 noskipws 流控制

用法2:接受一個字串,遇空格TAB回車都結束

#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}

輸入:jkljkljkl
輸出:jkljkljkl

輸入:jkljkl jkljkl       //遇空格結束
輸出:jkljkl

2cin.get()

用法1: cin.get(字元變數名)可以用來接收字元

#include <iostream>
using namespace std;
main ()
{
char ch;
ch=cin.get();               //或者cin.get(ch);
cout<<ch<<endl;
}

用法2:cin.get(字元陣列名,接收字元數目)用來接收一行字串,可以接收空格

#include <iostream>
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout<<a<<endl;
}

輸入:jkl jkl jkl
輸出:jkl jkl jkl

輸入:abcdeabcdeabcdeabcdeabcde (輸入25個字元)
輸出:abcdeabcdeabcdeabcd              (接收19個字元+1個'\0')

這個我還不知道怎麼用,知道的前輩請賜教;

3cin.getline()   // 接受一個字串,可以接收空格並輸出

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

輸入:jkljkljkl
輸出:jklj

接受5個字元到m中,其中最後一個為'\0',所以只看到4個字元輸出;

//延伸:
//cin.getline()實際上有三個引數,cin.getline(接受字串的看哦那間m,接受個數5,結束字元)
//當第三個引數省略時,系統預設為'\0'
//如果將例子中cin.getline()改為cin.getline(m,5,'a');當輸入jlkjkljkl時輸出jklj,輸入jkaljkljkl時,輸出jk

當用在多維陣列中的時候,也可以用cin.getline(m[i],20)之類的用法:

#include<iostream>
#include<string>
using namespace std;

main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n請輸入第"<<i+1<<"個字串:"<<endl;
cin.getline(m[i],20);
}

cout<<endl;
for(int j=0;j<3;j++)
cout<<"輸出m["<<j<<"]的值:"<<m[j]<<endl;

}

請輸入第1個字串:
kskr1

請輸入第2個字串:
kskr2

請輸入第3個字串:
kskr3

輸出m[0]的值:kskr1
輸出m[1]的值:kskr2
輸出m[2]的值:kskr3

#include<iostream>
#include<string>
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}

輸入:jkljkljkl
輸出:jkljkljkl

輸入:jkl jfksldfj jklsjfl
輸出:jkl jfksldfj jklsjfl

和cin.getline()類似,但是cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函式

注意:在使用getline時有一個奇怪的現象,在vc6下, 要打兩次回車才可以結束

5gets()        // 接受一個字串,可以接收空格並輸出,需包含#include<string>

#include<iostream>
#include<string>
using namespace std;
main ()
{
char m[20];
gets(m);                       //不能寫成m=gets();
cout<<m<<endl;
}

輸入:jkljkljkl
輸出:jkljkljkl

輸入:jkl jkl jkl
輸出:jkl jkl jkl

類似cin.getline()裡面的一個例子,gets()同樣可以用在多維數組裡面:

#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(m[i]);
}

cout<<endl;
for(int j=0;j<3;j++)
cout<<"輸出m["<<j<<"]的值:"<<m[j]<<endl;

}

請輸入第1個字串:
kskr1

請輸入第2個字串:
kskr2

請輸入第3個字串:
kskr3

輸出m[0]的值:kskr1
輸出m[1]的值:kskr2
輸出m[2]的值:kskr3

自我感覺gets()和cin.getline()的用法很類似,只不過cin.getline()多一個引數罷了;

這裡順帶說明一下,對於本文中的這個kskr1,kskr2,kskr3的例子,對於cin>>也可以適用,原因是這裡輸入的沒有空格,如果輸入了空格,比如ks kr jkl[回車]那麼cin就會已經接收到3個字串,ks,kr,jkl;再如kskr 1[回車]kskr 2[回車],那麼則接收kskr,1,kskr;這不是我們所要的結果!而cin.getline()和gets()因為可以接收空格,所以不會產生這個錯誤;

#include<iostream>
#include<string>
using namespace std;
main ()
{
char ch;
ch=getchar();                        //不能寫成getchar(ch);
cout<<ch<<endl;
}

//getchar()是C語言的函式,C++也可以相容,但是儘量不用或少用;

相關推薦

BellGrade部落 C++各種輸入

學C++的時候,這幾個輸入函式弄的有點迷糊;這裡做個小結,為了自己複習,也希望對後來者能有所幫助,如果有差錯的地方還請各位多多指教(本文所有程式均通過VC 6.0執行) 1cin 1cin.get() 2cin.getline() 3getline() 4gets() 5getchar() 附:cin

C++while與輸入起用的時候

今天寫一段程式碼,發現了一個以前沒有遇到過的問題。 std::string str1,str2; std::cout << "input str1" << std::endl; while(std::cin>>str1) {

我們為什麼堅持寫部落,學習的另種方式

種種原因: 我們很多人都有過寫點東西的衝動,只是又因為種種原因沒有發表。 寫著寫著,擠不出字來了。 總感覺自己的內心想法表達不出來。 感覺寫了沒什麼用,自己都明白了幹嘛還要寫。 怕寫出來被人笑話

【Altera部落大賽】時序優化例(三)

在使用兩種方法(《時序優化一例(一)》,《時序優化一例(二)》)對設計進行時序優化後,設計的建立時間餘量從-1.070優化到-0.240,但是時序還未達到收斂,繼而嘗試了許多其它方法:     (一)區域性優化    &n

JavaSE_8系列部落——專家之路()---Java反射的總結

先來四個基本問題 一什麼是反射what 生活中的反射 程式設計語言中的反射 Java中的反射 其他語言中的反射 NET平臺中的反射

python簡單爬蟲:爬取並統計自己部落頁面的資訊(

1. 什麼是爬蟲 也叫網路爬蟲,簡單來說,爬蟲就是從一個根網站出發,根據某種規則獲得更多的相關網站的url,自動下載這些網頁並自動解析這些網頁的內容,從中獲取需要的資料。例如爬取某種圖片、某類文字資訊等。爬蟲還可以用於編纂搜尋引擎的網路索引。 爬蟲所涉及的知

C++字串輸入的問題

自己的感想:C++中有很多輸入流函式,但是每個函式的結束符不一樣 如: std::cin()是以空格、回車、tab建、回車結束。 scanf中的%s也是隻讀一個字串和cin車不多 gets()是以回車鍵結束的;可以用來讀取多個不連續的字串;

C++】輸入物件cin讀取輸入的三種方式

輸入流物件cin讀取輸入流的三種方式 cin 輸入流物件有三種讀取控制檯輸入的方法。 分別為: 使用“>>”運算子,這種方法只能讀取單個單詞,cin使用空白(空格、製表符和換行符)來確定字串的結束位置使用getline()成員函式,getline()方法面

c++ 從輸入中獲取輸入

點選開啟連結 輸入流物件cin讀取輸入流的三種方式 c++ 從輸入流中獲取特定型別的資料的方式: 1、cin(以空白【空格,製表符和換行符】結束讀取) 2、cin的成員函式 getline(),用法:cin.getline()。功能:獲取一行輸入,包括空白【

第一篇部落c語言單鏈表的基本操作

c語言單鏈表的基本操作 對於c語言的初學者來說,連結串列是一塊大難點,其中用到結構體,指標的知識,這裡講的是最簡單的單鏈表,連結串列是一種動態儲存方式,和陣列相比,連結串列的優點是方便插入,沒有上限的儲存(相對來說),缺點也很明顯,排序很煩,查詢也很麻煩。

部落新站規劃()——(整體規劃)

導讀 部落格是以網路作為載體,簡易迅速便捷地釋出自己的心得,及時有效輕鬆地與他人進行交流,再集豐富

基於 abp vNext 和 .NET Core 開發部落專案 - 部落介面實戰篇(

## 系列文章 1. **[基於 abp vNext 和 .NET Core 開發部落格專案 - 使用 abp cli 搭建專案](https://www.cnblogs.com/meowv/p/12896177.html)** 2. **[基於 abp vNext 和 .NET Core 開發部落格專案

C# 各種導入 Excel 件的數據的方法總結

占用 guid 保存 null amp nbsp 字符串 count str 在導入之前都需要將上傳的文件保存到服務器,所以避免重復的寫這些代碼,先貼出上傳文件並保存到服務器指定路徑的代碼。 protected void btnImport_Click(object s

字節輸入本文件【OutputStream、FileOutputStream】

byte[] 方法名 cell end borde 方法 oid 所有 寫入文件 字節輸入流寫文本文件 1.OutputStream基類 作用:把內存中的數據輸出到文件中。 ※OutputStream類的常用方法 方法名稱 說明

C#各種導入Excel件的數據的方法總結

context tab 過程 all dap 添加列 map lease 內存 在導入前都需要將上傳的文件保存到服務器,所以避免重復的寫這些代碼,先貼出上傳文件並保存到服務器指定路徑的代碼 protected void btnImport_Click(object sen

Java中利用IO中的輸入讀取件實現登錄功能

use 判斷 body 當前 ole pwd files pre users 1 package object.io; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundEx

部落已停用,博會逐漸轉移到新地址,http://blog.csdn.net/liupeifeng3514

RabbitMQ的安裝過程非常簡單:由於RabbitMQ是基於Erlang語言開發並執行的,所以安裝RabbitMQ的第一步是安裝Erlang執行環境。您可以在https://www.erlang-solutions.com/resources 下載最新Erla

輸入一行字元分別統計出其中英文字母、空格、數字和其他字元的個數。(用c++語言編寫程式)【寫的第1篇部落,很高興

#include<stdio.h> int main() { char ch; //定義ch為字元型變數 int a=0,b=0,c=0,d=0; //定義a,b,c,d為整型變數並賦初值 while(scanf("%c",&ch),ch!=’\n’) //輸入字元直到c

懶妹子,第一次開始想寫部落,有那麼丟丟小激動呢 ememem--進入正題,分享關於個別iphoneX輸入框失去焦點的bug

近來iphone新機鋪面而來,作為一個自己沒有iphone最新機的小前端,也只有羨慕的份啦,不過呢程式碼還是要碼的,新機的bug還是要改滴,iphone x系列包括xs xr,當input獲取焦點後鍵盤彈起,頁面隨著鍵盤向上滑動,一切正常,然鵝,當輸入完,點選手機鍵盤自帶的完成按鈕,或者是你要進入下一步操作,

【FIF_Bro的部落格C++ 的最大優點是,它是門強大,兼顧了底層效率的,高階語言。這使得 C++ 幾乎沒有任何侷限性,無所不能。只要你是一個追求極致達到偏執的人,你幾乎總可以追尋到它的影子和存在。這門語言超高的開發成本,使得只有偏執的人,才會對它痴狂

C++ 的最大優點是,它是一門強大,兼顧了底層效率的,高階語言。這使得 C++ 幾乎沒有任何侷限性,無所不能。只要你是一個追求極致達到偏執的人,你幾乎總可以追尋到它的影子和存在。這門語言超高的開發成本...