字符串的輸入問題 C++


   C++中,初學時最常用的輸入字符的方式為cin,但是,cin是如何確定已經完成了字符串的輸入了呢?由於不能通過鍵盤輸入空字符("\0"),因此cin需要用別的方法來確定字符串的結尾位置。cin使用空白(空格,制表符和換行符)來確定字符串結束的位置,這意味着cin在取字符數組輸入時只能讀取一個單詞。讀取該單詞后,cin將該字符串放到數組中,並自動在結尾添加空字符。如下的程序所示:

#include<iostream>
using namespace std;
int main()
{   
    const int size = 20;
    char  name[size];
    char desert[size];
    cout << "請輸入你的名字:\n";
    cin >> name;
    cin.get();
    cout << "請輸入你最喜歡的甜食:\n";
    cin >> desert;
    cin.get();
    cout << "I have some delicious " << desert << " for you," << " . \n";
    cin.get();
    return 0;
}

程序運行結果:

  請輸入你的名字:
  xiao ming
  請輸入你最喜歡的甜食:
  I have some delicious ming for you, .

  你看,上圖中的運行程序,我還沒有對我最喜歡的甜食輸入呢,程序就迫不及待的顯示了下面的內容。這是因為:cin把xiao作為了第一個字符串,並把它放入了name數組中,把ming這個字符串留在了輸入隊列中。當cin在輸入隊列中搜索用戶喜歡的甜點時,它發現了ming,因此它讀取ming,並把它放入了dessert數組中。

  那么,如何輸入一行的字符串呢?

一、面向行的輸入:getline()與get()

1. getline()

  getline()函數用於讀取整行,它使用通過回車鍵鍵入的換行符來確定輸入結尾。該函數有兩個參數,第一個參數是用來存儲輸入行的數組的名稱,第二個參數是要讀取的字符數。如下面的代碼所示就能避免只讀取一個單詞的錯誤:

#include<iostream>
using namespace std;
int main()
{   
    const int size = 20;
    char  name[size];
    char dessert[size];
    cout << "請輸入你的名字:\n";
    cin.getline(name, size);
    cout << "請輸入你最喜歡的甜食:\n";
    cin.getline(dessert, size);
    cout << "I have some delicious " << dessert << " for you.\n" ;
    cin.get();
    return 0;
}

程序運行結果:

請輸入你的名字:
xiao ming
請輸入你最喜歡的甜食:
ice cream
I have some delicious ice cream for you.

getline()函數每次讀取一行,它通過換行符來確定行尾,但不保存換行符。相反,在存儲字符串時,他用空字符來替換換行符。

2.get()

get的用法和getline()函數一樣。但是,get()函數會保存換行符。先看個例子:

cin.get(name,size);

cin.get(name,size);

  就是連續調用了兩次get(),由於第一次調用后,換行符將保留在輸入隊列中,因此,第二次調用時看到的第一個字符便是換行符,因此get()認為以到達結尾,而沒有發現任何可讀取的內容。

  那么,如何解決這種問題呢?有以下兩種方式:

(1)                              

cin.get(name,size);

cin.get(); // 使用不帶任何參數的get()可讀取下一個字符(即使是換行符),因此,可通過它來處理換行符,為讀取下一行輸 入做好准備

cin.get(name,size);

(2)cin.get(name,size).get()

程序如下所示:

#include<iostream>
using namespace std;
int main()
{   
    const int size = 20;
    char  name[size];
    char dessert[size];
    cout << "請輸入你的名字:\n";
    cin.get(name, size).get();
    cout << "請輸入你最喜歡的甜食:\n";
    cin.get(dessert, size).get();
    cout << "I have some delicious " << dessert << " for you.\n" ;
    cin.get();
    return 0;
}

運行結果:

請輸入你的名字:
xiao ming
請輸入你最喜歡的甜食:
ice cream
I have some delicious ice cream for you.

 


免責聲明!

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



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