Как считать строку в цикле?

284
30 мая 2017, 02:44

при попытке использовать getline в цикле независимо от n дает ввести строку только один раз. помогите исправить.

int n;
cin >> n;   
string s;
   for(int i = 0; i < n; i++)
    {
        getline(cin,s);
    }
Answer 1

Проблема в том, что считывание продолжается в той же строке, в которой было считано n

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;   
    cin.ignore();
    string s;
    for(int i = 0; i < n; i++)
    {
        getline(cin,s);
        cout << s<<endl;
    }
}
Answer 2

Чуть выше была указана одна из ошибок, но я бы делал немного по-другому... К тому же, у вас ещё несколько нюансов по коду (хоть и не критичных - дело, скорее вкуса и оформления).

#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
    int n;
    string s;
    cout<<"input number: "<<flush;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cout<<"input string: "<<flush;
        cin>>s;
        cout<<"string No. "<<i<<": "<<s<<"\n\n";
    }
    cout<<endl;
    return 0;
}

Мой код отрабатывает без проблем. Добавил cout-ы для наглядности. Их можно убрать без вреда для кода.

Во-первых, при инициализации цикла, я бы в первичное выполнение записал i=1 и в условие добавил i<=n, потому что это выглядит немного логичнее. Вместо getline(), я бы просто делал cin>>s. Ну а смысл? Хотя, если гуру С++ меня поправят и дадут объяснение - что ж, буду благодарен за науку. :)
А вот в конце кода у @koshachok есть фундаментальная ошибка. Функция main() должна возвращать значение! Это правильно. Да, компилятор это может сделать и за вас. Но доверять всё компилятору - дурной тон. Поэтому я добавил return 0;, чтобы сообщить, что программа отработала без ошибок. Передача аргументов в main() тоже может выполняться компилятором вместо пользователя, но я уже упоминал, что доверять компилю - дурной тон.

Опять же, это моё личное мнение. Я в С++ новчиок, поэтому готов выслушать адекватную (и главное обоснованную) критику. Я готов признавать свои ошибки. :)

READ ALSO
Проблемы с кодировкой на ideone

Проблемы с кодировкой на ideone

Как известно, ideone компилирует исходники на Си++ в utf8Однако, мне нужна строка в utf16 (wstring)

277
Как обрезать полное ФИО до инициалов в с++

Как обрезать полное ФИО до инициалов в с++

В программе предусмотрен ввод ФИОЯ не знаю как реализовать, так, что бы вводилось иванов иван иванович, а на выходе получалось Иванов И

261
Поиск объединения промежутков

Поиск объединения промежутков

Мне нужен именно алгоритм

256
Критические секции. C++

Критические секции. C++

Здраствуйте, как правильно поставить критическую секцию в такой функции?

196