#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t; //Number of test cases
    while(t--){
        cin.ignore();
        string s;
        getline(cin,s);
        cout<<s<<endl;
    }
    return 0;
}

Вход:

2
AMbuj verma
Aaaa bBBB
Bm Chetan

Выход:

AMbuj verma
aaa bBBB
m Chetan

Вышеприведенная программа не читает первый символ строк.

Это вывод, который я получаю.

Я также использовал cin.ignore()

0
Chetanrns 24 Окт 2017 в 17:35

3 ответа

Лучший ответ

Что вам нужно сделать, это вывести cin.ignore() за пределы цикла while, поскольку каждый раз, когда ваш цикл работает, он принимает первую букву вашей строки.

    cin>>t; //Number of test cases
    cin.ignore();
    while(t--){

        string s,a;
        getline(cin,s);
        cout<<s<<endl;
    }

И наконец, почему вы пишете string s, a, если в вашем коде нет string a.

2
Aditi Rawat 24 Окт 2017 в 14:49

Вы вызываете cin.ignore(); в цикле, поэтому он будет игнорировать один символ в каждой итерации. Поскольку вы используете operator >> только один раз, вам нужно переместить вызов ignore из цикла и получить его сразу после ввода.

cin>>t; //Number of test cases
cin.ignore(); // get rid of newline
while(t--){
    string s,a;
    getline(cin,s);
    cout<<s<<endl;
}
1
NathanOliver 24 Окт 2017 в 14:40

На самом деле да, cin.ignore() поглощает ваших персонажей. Теперь, чтобы добавить что-то подробно, вход в основном хранится в буфере (не в случае перенаправления). Теперь, когда вы используете getline, он делает это.

(1) istream& getline (istream& is, string& str, char delim);
(2) istream& getline (istream& is, string& str);<--you used this

Извлекает символы из is и сохраняет их в str [getline (cin.str)] до Обнаружен символ-разделитель (или символ новой строки, '\ n', для (2)).

Извлечение также останавливается, если достигнут конец файла в is или если во время операции ввода возникает какая-либо другая ошибка.

Если разделитель найден, он извлекается и удаляется (т.е. он не сохраняется, и после него начинается следующая операция ввода).

Поэтому, когда в основном это \n используется и отбрасывается самим getline. Теперь вы используете cin.ignore()

istream & ignore (размер потока n = 1, int delim = EOF); Извлечение и удаление символов Извлекает символы из входной последовательности и отбрасывает их до тех пор, пока не будет извлечено n символов или один из них не сравнится с разделителем.

Таким образом, вы ничего не указали - поэтому он отбрасывает один символ, который доступен в буфере, который является первым символом. (Но вы думали, что будет \n, который будет использован, но его там не было, поскольку он был отброшен getline().

Вот как вы получаете вывод, как это.

0
user2736738 24 Окт 2017 в 15:32