Zakończenie wczytywania liczb z wejścia standardowego

0

Witam
Chcałbym do stringa wpisać tekst przypuścmy, że taki
1 2 3
3 2 1
Po użrzyciu getline i wciśnięciu enter wczytuje linijke i kończy.
Natomiast while(getline(cin, t)); niby działa, ale nie można wyjść z pętli.
Jak to rozwiązać?? Prosze o pomoc

4

Natomiast while(getline(cin, t)); niby działa, ale nie można wyjść z pętli.

U mnie działa. 🤷 Tzn. robi to, czego bym oczekiwał — wczytuje kolejne linie tak długo, aż nie napotka EOF. Jak chcesz wysyłać EOF w konsoli, to na Linuksie się to robi przez naciśnięcie Ctrl + d, a na Windowsie chyba (sprawdź, nie pamiętam na 100%) przez naciśnięcie Ctrl + z.

0

Dzięki działa Ctrl + d

0

@wojovit:

Natomiast while(getline(cin, t)); niby działa, ale nie można wyjść z pętli.

z pętli można wyjść jak zastosujesz warunek. np

while(getline(cin,napis)){
    if(napis=="quit") return -1;
}

nie wiem czy dobrze napisałem ale coś podobnego możesz zrobić

0

Ctrl + d niby działa, ale dostaję tylko ostatni wyraz, a nie caly napis.
A chodzi mi o to żebym miał dostęp do całeg stringa.

0
wojovit napisał(a):

Ctrl + d niby działa, ale dostaję tylko ostatni wyraz, a nie caly napis.
A chodzi mi o to żebym miał dostęp do całeg stringa.

int main(void)
{
    string napis;

    while(getline(cin,napis)){
        cout << "wpisano -> " << napis << endl;
        if(napis=="quit") return -1;
    }
}

spróbuj tak - jeżeli o to ci chodzi. Bo nie wiem co chcesz z tym napisem zrobić.

0

A chodzi mi o to żebym miał dostęp do całeg stringa.

To przestań nadpisywać, i zacznij łączyć stringi. Np. zacznij od pustego stringa poza pętlą, i w samej pętli wczytuj do tymczasowego i popisuj ten tymczasowy do tego pierwotnie pustego.

0
Althorion napisał(a):

A chodzi mi o to żebym miał dostęp do całeg stringa.

To przestań nadpisywać, i zacznij łączyć stringi. Np. zacznij od pustego stringa poza pętlą, i w samej pętli wczytuj do tymczasowego i popisuj ten tymczasowy do tego pierwotnie pustego.

Dzięki. Dobry pomysł to powinno się udać :)

2

Albo wczytuj całość ciurkiem:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string x;
	if(getline(cin,x,'\0')) cout<<x;
	return 0;
}
1

jak string to i empty

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string napis, tmp;
    while(getline(cin,tmp)&&(!tmp.empty())){
        napis+=tmp+'\n';
    }
    cout<<napis<<"\n";
    return 0;
}
1
wojovit napisał(a):

Ctrl + d niby działa, ale dostaję tylko ostatni wyraz, a nie caly napis.
A chodzi mi o to żebym miał dostęp do całeg stringa.

A gdzie kod? Nie pokazałeś ani jednej linijki kodu i my jedynie możemy zgadywać co zrobiłeś źle na podstawie doświadczeń z innymi początkującymi.
Proszę zawsze podawaj cały swój kod. Dopóki nie nabierzesz doświadczenia co jest ważne co nie, jest to najlepsze rozwiązanie byś dostawał lepsze i szybsze odpowiedzi. Najlepiej z przykładowym wejściem i oczekiwanym wyjściem.

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