C++ cin輸入的多種方法詳解
前言
在C++中一般使用
cin來進行交互,獲取用戶輸入信息。cin是C++編程語言中的標(biāo)準(zhǔn)輸入流對象,即stream類的對象。cin主要用于從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),這里的標(biāo)準(zhǔn)輸入,指的是終端的鍵盤。主要用到有cin >>、cin.get()、cin.getline()。cin讀取數(shù)據(jù)也是從緩沖區(qū)中獲取數(shù)據(jù),緩沖區(qū)為空時,cin的成員函數(shù)會阻塞等待數(shù)據(jù)的到來,一旦緩沖區(qū)中有數(shù)據(jù),就觸發(fā)cin的成員函數(shù)去讀取數(shù)據(jù)。
一、cin
1、cin >>
支持
連續(xù)讀取,以Tab、空格為分隔符,換行符為結(jié)束符號;
/*----------------------------------------------------------------------
> File Name: cinDemo01.cpp
> Author: Jxiepc
> Mail: Jxiepc
> Created Time: Mon 20 Sep 2021 10:09:55 AM CST
----------------------------------------------------------------------*/
#include<iostream>
#include<unistd.h>
#include<cstring>
int main(int argc, char *argv[]){
std::string s;
while(std::cin >> s){
std::cout << s << std::endl;
}
return 0;
}
當(dāng)
cin>>從緩存區(qū)讀取數(shù)據(jù)時,會自動忽略作為第一個字符存在的Tab、空格(Space)、換行,繼續(xù)讀取下一個字符,若緩存區(qū)為空,則等待。但是如果讀取成功,字符后面的分隔符是殘留在緩沖區(qū)的,cin>>不做處理。

2、cin.get()
讀取
字符,包含空格;
/*----------------------------------------------------------------------
> File Name: cinGetDemo.cpp
> Author: Jxiepc
> Mail: Jxiepc
> Created Time: Mon 20 Sep 2021 10:20:59 AM CST
----------------------------------------------------------------------*/
#include<iostream>
#include<unistd.h>
#include<cstring>
#include<fstream>
void test02(){
char str[256];
std::cout << "Enter the name of an existing text file: ";
std::cin.get (str,256); // get c-string
std::ifstream is(str); // open file
char c;
while (is.get(c)) // loop getting single characters
std::cout << c;
is.close(); // close file
}
void test01(){
char a,b;
a = std::cin.get();
std::cout << "a:" << a <<std::endl;
std::cin.get(b);
std::cout << "b:" << b << std::endl;
}
int main(int argc, char *argv[]){
std::cout << "測試字符..." << std::endl;
test01();
std::cout << "--------------------------------------" << std::endl;
//sleep(1);
//std::cout << "測試get讀取文件" << std::endl;
//test02();
return 0;
}


2.1 函數(shù)介紹
int get();
istream& get(char&c);
/*
* @func:- 單個字符;
* - 不會忽略分隔符;
* - 成功讀取的時候則返回字符的ASCII碼值,遇到文件結(jié)束符時則返回EOF(-1);
*/
istream& get (char* s, streamsize n);
istream& get (char* s, streamsize n, char delim);
/*
* @func: - 從在流提取C-串,直到(n-1)字符已被提取或定界字符結(jié)束。('\n')或DELIM(自定義)。
* - 若找到定界符則不會從輸入序列中提取,并保留作為從流中提取的下一個字符。
* - 如果n大于0,即使提取的是空字符串,也會自動添加一個空字符('\0')到寫入序列。
* @param s:接收字符串;
* @param n:- 寫入s的最大字符數(shù)(包括終止空字符);
* - 若小于2,則函數(shù)不提取任何字符并設(shè)置failbit;
* - Streamsize是一種帶符號的整型。
* @param delim:自定義結(jié)束符。
*/
istream& get(streambuf&sb);
istream& get (streambuf& sb, char delim);
/*
* @func:- 從流中提取字符,并將其插入到輸出序列流緩沖區(qū)對象控制的某人,('\n')或DELIM(自定義)。
* - 只有成功插入的字符才會從流中提取。分隔字符,還是最終未能插入的字符,保留在那里作為下一個要從流中提取的字符。
*/
3、getline()
從標(biāo)準(zhǔn)輸入設(shè)備讀取一串字符串,并以指定的結(jié)束符結(jié)束。
/*----------------------------------------------------------------------
> File Name: cinGetlineDemo.cpp
> Author: Jxiepc
> Mail: Jxiepc
> Created Time: Mon 20 Sep 2021 11:08:17 AM CST
----------------------------------------------------------------------*/
#include<iostream>
#include<unistd.h>
#include<cstring>
void test01(){
char name[200];
std::cout << "請輸入:" ;
std::cin.getline(name, 200);
std::cout << name << std::endl;
}
int main(int argc, char *argv[]){
test01();
return 0;
}

函數(shù)介紹
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
/*
* @func:- 從流中提取字符作為未格式化的輸入,并將它們以c字符串的形式存儲到s中,直到提取的字符成為分隔符,或者有n個字符被寫入s中(包括結(jié)束的空字符);
* - 如果到達(dá)文件結(jié)束符,該函數(shù)也將停止提取字符;
* - 若n大于0,提取到空串,也會自動添加一個空字符('\0')到寫入序列。
* @param s:指向字符數(shù)組的指針,在該數(shù)組中提取的字符存儲為c字符串;
* @param n:寫入s的最大字符數(shù)(包括終止空字符);
* @param delim:結(jié)束符;
*/
到此這篇關(guān)于C++ cin輸入的幾種方式的文章就介紹到這了,更多相關(guān)C++ cin輸入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++面試題之結(jié)構(gòu)體內(nèi)存對齊計算問題總結(jié)大全
這篇文章主要給大家總結(jié)了關(guān)于C++面試題中結(jié)構(gòu)體內(nèi)存對齊計算問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),通過這些介紹的內(nèi)容對大家在面試C++工作的時候,會有一定的參考幫助,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
解析C++浮點數(shù)無效值的定義與無效值判定的小結(jié)
本篇文章是對C++中浮點數(shù)無效值的定義與無效值的判定進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
帶你用C語言實現(xiàn)strtok和字符串分割函數(shù)
下面小編就為大家?guī)硪黄猚語言中字符串分割函數(shù)及實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2021-09-09
C++ 使用CRC32檢測內(nèi)存映像完整性的實現(xiàn)步驟
當(dāng)我們使用動態(tài)補丁的時候,那么內(nèi)存中同樣不存在校驗效果,也就無法抵御對方動態(tài)修改機器碼了,為了防止解密者直接對內(nèi)存打補丁,我們需要在硬盤校驗的基礎(chǔ)上,增加內(nèi)存校驗,防止動態(tài)補丁的運用。2021-06-06

