c++字符串的輸入


先聲明一下字符串的初始化:當初始賦值的時候一定是反斜杠0(\0)有三種方式“”,{‘\0’}."\0"(如果是已經賦值的我們可以采用memset(recvbuf, '\0', sizeof(recvbuf));這種方式來清空)

下面來介紹c++的幾個關於按鍵輸入捕獲:

一.cin

  使用cin輸入時,程序將輸入視為一系列字節。每個字節都被解釋為字符編碼。不管數據類型是什么,輸入一開始都是字符數據,然后cin對象負責將數據轉換成其他類型。當你輸入Michael Jackon時,通運行程序你會發現name只存儲了Michael,這是為什么呢?

 原來是 cin使用空白(空格,制表符和換行符)來確定字符串的結束位置在讀取字符數組時,cin將只會讀取第一個單詞,cin將該字符串放到數組中,並自動添加空字符Michael Jackon 之間的空格被當作結束符了,而Jackon被繼續留在輸入隊列中,直到下一次讀取輸入。

二.getline()和cin.getline()

  兩者的功能基本相同都可以接受空格,且會把換行符進行丟棄,但是cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函數。getline定義在string中,getline利用cin可以從標准輸入設備鍵盤讀取一行,當遇到如下三種情況會結束讀操作:1)到文件結束,2)遇到函數的定界符,3)輸入達到最大限度。 

函數原型有兩個重載形式: 
istream& getline ( istream& is, string& str); / /默認以換行符結束 
istream& getline ( istream& is, string& str, char delim); 

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

int main()
{
    string str;
    getline(cin,str);
    cout<<str<<endl;
    return 0;
}

  函數作用:從標准輸入設備鍵盤讀取一串字符串,並以指定的結束符結束。 
函數原型有兩個: 
istream& getline(char* s, streamsize count); // 默認以換行符結束 
istream& getline(char* s, streamsize count, char delim); 

#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); 
}

三.cin.get

即cin.get(), cin.get(char ch), cin.get(array_name, Arsize) 
對應的函數原型如下: 
int cin.get(); 
istream& cin.get(char& var); 
istream& get ( char* s, streamsize n ); // 讀取字符串時,默認以換行符結束。 
istream& get ( char* s, streamsize n, char delim ); // 讀取字符串時,第三個參數可指定結束符讀取字符的情況: 

輸入結束條件:Enter鍵 對結束符處理:不丟棄緩沖區中的Enter cin.get() 與 cin.get(char ch)用於讀取字符,他們的使用是相似的, 即:ch=cin.get() 與 cin.get(ch)是等價的.
cin.get(array,20);讀取一行時,遇到換行符時結束讀取,但是不對換行符進行處理,換行符仍然殘留在輸入緩沖區,所以我們需要再調用一下cin.get();來處理掉換行符。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM