欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C++采用getline從命令行獲取輸入時要注意什么問題

本篇文章為大家展示了C++采用getline從命令行獲取輸入時要注意什么問題,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,成都創(chuàng)新互聯(lián)公司依托強大的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計開發(fā)服務(wù)!

問題背景

主要是在做C++的筆試題時可能會碰到,如下:

要求從命令行里輸入一個整數(shù)n和一個字符串str。
要求第一行用來輸入一個整數(shù)n,第二行用來輸入一行字符串。
Note:不能是在同一行輸入啊,第一行是一個整數(shù)n,第二行是一個字符串。

我好像把一個問題重復了三遍

您可能會寫出如下的代碼(開始時沒留意,我也是這么寫的)

#include <iostream>
#include <string>

using namespace std;


int main()
{
    int N{};
    string str;

    /// 輸入 N //
    cin >> N;

    /// 輸入一行字符串 //
    getline(cin, str);

    /// 打印輸入的 //
    cout << "N: " << N << endl;
    cout << "str: " << str << endl;

    return 0;
}
 

但是你要是這么寫的話,你的str是一個空的。實際上你第一行輸完整數(shù)n后,回車(換行),準備在第二行輸入一行字符串時,程序就“結(jié)束了”。你根本都沒法在第二行輸入字符串!

這是因為

  • 你在輸入整數(shù)后回車了一下,整數(shù) 從緩沖區(qū)中流到了 int 型 變量 n 中,此時 緩沖區(qū)中還剩下一個 回車(換行)字符。

  • 接下來 getline準備從 緩沖區(qū)(cin) 中獲取字符串,但是getline發(fā)現(xiàn)第一個字符就是回車(換行),所以getline就直接結(jié)束了,所以getline并沒有從緩沖區(qū)獲取到任何字符串給str,所以結(jié)果中 str 為空的。

上面的代碼運行結(jié)果如下:

C++采用getline從命令行獲取輸入時要注意什么問題

 

解決辦法

cin >> N; 后面加一個cin.get()或者getchar() 就好了。

因為導致getline無法從cin中獲取字符串給str的原因就是 在輸入完整數(shù)N, 回車后, 緩沖區(qū)中還存在著一個 回車(換行)的字符。所以我們只要把這個字符拿出來扔掉就可以了。

代碼如下,并做了驗證:

#include <iostream>
#include <string>

using namespace std;


int main()
{
    int N{};
    string str;

    /// 輸入 N //
    cin >> N;

    char tmp = cin.get(); /// 把緩沖區(qū)中的 回車(換行)扔掉。

    /// 輸入一行字符串 //
    getline(cin, str);

    /// 打印輸入的 //
    cout << "N: " << N << endl;

    cout << (int)tmp << endl;   /// 輸出 10 看一下ASCII碼表,10代表換行符,即 \r 

    cout << "str: " << str << endl;

    return 0;
}
 

可以發(fā)現(xiàn),我們在輸入整數(shù)N后,回車一下,留在緩沖區(qū)中的是一個換行符!所以我們只要把它拿出來扔掉就可以了。

結(jié)果如下:

C++采用getline從命令行獲取輸入時要注意什么問題

上述內(nèi)容就是C++采用getline從命令行獲取輸入時要注意什么問題,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標題:C++采用getline從命令行獲取輸入時要注意什么問題
本文URL:http://chinadenli.net/article10/jieigo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、動態(tài)網(wǎng)站企業(yè)建站、品牌網(wǎng)站制作網(wǎng)站導航、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)