getline, за которым следует целочисленный ввод в c ++ - PullRequest
0 голосов
/ 06 августа 2020

Я хочу ввести строку, содержащую пробелы, за которыми следует целочисленный ввод в C ++. Я читал похожие сообщения по этому вопросу, но не нашел ничего полезного. Вот что я пробовал.

#include<iostream>
#include<string>

using namespace std;
int main() {
    int t;
    cin>>t;
    while(t--){
//this part here is my doubt... i want to accept integer after string input
        string s;
        int c;
        getline(cin,s);
        
        cin>>c;
        cin.ignore();
        cout<<s<<endl;
    }
    return 0;
}

он ничего не печатает на выходе. Даже если я помещаю cin.ignore () перед целочисленным вводом, он все равно ничего не печатает на выходе.

1 Ответ

0 голосов
/ 06 августа 2020

Думаю, ваша проблема в смешивании >> и getline. Возможно, вам будет полезно прочитать примечания здесь:

https://en.cppreference.com/w/cpp/string/basic_string/getline

Notes

При использовании ввода, разделенного пробелами ( например, int n; std :: cin >> n;) любые последующие пробелы, включая символ новой строки, будут оставлены во входном потоке. Затем при переключении на строчно-ориентированный ввод первая строка, полученная с помощью getline, будет именно этим пробелом. В вероятном случае, когда это нежелательное поведение, возможные решения включают:

  • Явный посторонний начальный вызов getline
  • Удаление последовательных пробелов с помощью std::cin >> std::ws
  • Игнорирование всех оставшихся символов в строке ввода с помощью cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Вы также можете посмотреть комментарий Сэма Варшавчика и использовать только getline, но затем построить std::istringstream из строку с целым числом и извлеките его с помощью >>.

...