Jak wczytać cały wiersz przez cina?

0

Użytkownik podaje std::cinem N ilość wierszy, a potem wiersze po kolei. Jak wczytać N to wiem

int n = 0;
std::cin >> n;

ale gdy teraz bym chciał wczytać do stringa operatorem >> to wczytam tylko jeden wyraz, a nie cały wiersz. A gdy używam std::getline

for(int i = 0; i < n; ++i) {
    std::string line;
    std::getline(std::cin, line);
}

to program nie pozwala na wpisanie w tekstu w konsole.

W jaki sposób mogę wpisać w "konsole" cały wiersz tekstu i zapisać go do stringa?

0

Możesz wczytywać dowolną ilość linii:

    while (getline(cin, line)) {
      cout << line<<endl;
    }
3

@HowToMake: Przecież Twój program działa -- prawie. Jedyny problem, to był wiszący enter (lub coś więcej) po std::cin >> n;, i zjadam go linijką zaznaczoną // ***:

#include <iostream>

int main() {

    int n = 0;
    std::cin >> n;

    std::string dummy;
    std::getline(std::cin, dummy);  // ***

    for(int i = 0; i < n; ++i) {
        std::string line;
        std::getline(std::cin, line);
        std::cout << '[' << line << ']' << std::endl;
    }
}

Przykład uruchomienia:

3
Ala
[Ala]
ma 2 koty
[ma 2 koty]
i psa
[i psa]
2
HowToMake napisał(a):

Użytkownik podaje std::cinem N ilość wierszy, a potem wiersze po kolei.

Uwaga tu się kryje pułapka! po użyciu operatora >> std::getline wczyta do końca linię zaraz po liczbie, więc jeśli liczba jest w swojej własnej linii powiano być tak:

size_t n;

if (std::cin >> n) {
     std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
     std::string line;
     while (n-- && std::getline(std::cin, line)) {
         ....
     }
}
HowToMake napisał(a):

to program nie pozwala na wpisanie w tekstu w konsole.

W jaki sposób mogę wpisać w "konsole" cały wiersz tekstu i zapisać go do stringa?

Przypuszczalnie wczytanie liczby się nie powiodło (coś wpisałeś źle) i strumień wejściowy wszedł w stan błędu, przez co wszystkie kolejne operacje nic nie robią, dopóki błąd nie zostanie obsłużony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1