簡體   English   中英

std::getline 在接受多個字符串輸入時忽略第一個字符,並且在不使用 cin.ignore() 時字符串下標超出范圍

[英]std::getline ignores first character when taking multiple string inputs and string subscript goes out of range when not using cin.ignore()

當我使用 cin.ignore() 時,我可以接受所有輸入,但在第一個輸入之后我丟失了所有字符串的第一個字符。

如果我不使用 cin.ignore() 我得到一個字符串下標超出范圍運行時錯誤

這是供參考的代碼

std::vector<std::string> input;

for (int i = 0; i < 5; i++)
    {
        std::string lines;
        std::cin.ignore();
        std::getline(std::cin,lines,'\n');
        input.push_back(lines);
    }

您是什么意思“獲取字符串下標超出范圍運行時錯誤”? 我注釋掉代碼“ std::cin.ignore(); ”,程序運行正常。 function getline將丟棄 char '\n'。

我測試了你提供的這些代碼,如果我注釋掉 cin.ingnore,它運行正常。 這是代碼:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    std::vector<std::string> input;

    for (int i = 0; i < 5; i++)
    {
        std::string lines;
        //std::cin.ignore();
        std::getline(std::cin, lines, '\n');
        input.push_back(lines);
    }
    for (auto s : input) {
        cout << endl << s;
    }
}

也許你應該檢查你的代碼,看看是否還有其他錯誤。

暫無
暫無

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

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