簡體   English   中英

getline 忽略字符串輸入的第一個字符

[英]getline ignores first character of string input

為什么 C++ 的getline函數會忽略我輸入的第一個字符?

這篇文章中,罪魁禍首是cin.ignore() ,但我的代碼中沒有cin.ignore()函數。

這是我正在嘗試做的一個非常基本的示例:

#include <iostream>
#include <string>

using namespace std;

int main(){

    string user_input;

    cout << "input: ";
    cin >> user_input;
    getline(cin,user_input);

    cout << "length: " << user_input.length() << endl;
    cout << "your input: " << user_input << endl;

    return 0;
}

問題是,輸出是完全錯誤的:

input: 1 2 3
length: 4
your input:  2 3

顯然,字符串的長度(包括空格)應該是5 ,而不是4 您還可以看到user_input的第一個字符丟失了。

有人可以向我解釋為什么這段代碼給出了錯誤的輸出以及我需要做什么來解決這個問題嗎? 我從來沒有使用過包含這樣空格的字符串。 我很好奇是什么原因導致出現這個問題::)

cin >> user_input是罪魁禍首。 它抓住輸入直到第一個空格去除那行代碼,你應該只使用getline(cin,user_input)

cin >> user_input;

我不確定你為什么把那條線放在那里,但是它會讀取並消耗cin第一個以空格分隔的字符串。 所以它讀取1.之后, getline讀取該行的其余部分,即" 2 3"

cin >> user_input; 正在吃第一個號碼。 然后getline()出現並獲得其余的輸入。 刪除cin >> user_input; 它應該工作正常。

只需刪除這一行cin >> user_input; 那么您的代碼將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM