Kod: Zaznacz cały
string tekst (string s)
{
cout<<"Prosze wpisac teskt: ";
getline(cin,s);
cout<<"\""<<s<<"\"";
cout<<endl;
}
Kod: Zaznacz cały
string tekst (string s)
{
cout<<"Prosze wpisac teskt: ";
getline(cin,s);
cout<<"\""<<s<<"\"";
cout<<endl;
}
Gdy już nic nie będzie w strumieniu wejścia. Aż chciałoby się rzec "jak się skończy, to się skończy".
Kod: Zaznacz cały
Po cichu
Po wielkiemu cichu
http://www.cplusplus.com/reference/istream/istream/read/
lub http://www.cplusplus.com/reference/istream/istream/readsome/
http://www.cplusplus.com/reference/istream/istream/get/
i zliczanie po znaku (lub parze znaków w kodowaniach, gdzie nowa linia wymaga więcej oktetów).Mnie właśnie chodzi o to, jaka to instrukcja przeczyta "cały strumień wejścia" w sytuacji, kiedy użytkownik wpisuje tekst z klawiatury? Bo ja nie słyszałem o takiej instrukcji.Afish pisze: ↑7 gru 2020, o 10:24Przy czym całe Twoje wyrażenie "po drugiej linijce" jest niepoprawne koncepcyjnie. Program powinien wczytać cały strumień wejścia, nie powinien przejmować się "czekaniem", bo to załatwia system operacyjny i biblioteka standardowa buforując wejście. Może nie być żadnego "czekania", jeżeli wejście jest przekierowane z pliku.
W pętli odczytywać wejście aż do końca strumienia i szukać znaków nowej linii. Możesz wczytywać czymkolwiek, getem, getlinem, readem, jak Ci wygodniej.
To jest niepotrzebne, nie musisz wiedzieć, jak dużo użytkownik chce podać, bo jak już skończy podawać, to masz koniec strumienia. Oznaczanie końca wejścia specjalnym znakiem też jest niepotrzebne, bo koniec wejścia oznacza się zamknięciem strumienia. Tak jak na kartce papieru, jak kartka się "kończy", to jest "koniec", nie musisz na końcu kartki rysować jakiegoś kwadracika do oznaczenia końca, bo wystarczy fizyczne ograniczenie.Dasio11 pisze: ↑7 gru 2020, o 11:47 Oczywiście łatwo naprawić ten problem, na przykład każąc użytkownikowi z góry zadeklarować długość tego co napisze, albo ustalając z nim specjalny znak oznaczający koniec wejścia. Ale w treści zadania nie ma o tym ani słowa, więc jeśli faktycznie o takie rozwiązanie chodziło, to pozostaje mi tylko podtrzymać swoją początkową tezę: polecenie jest nieprecyzyjne.
No przecież podałem. Strumień nie ma pojęcia, skąd bierze dane, może to być plik, konsola, named pipe, bezpośrednio z pamięci, cokolwiek innego. Jak chcesz zakończyć strumień w konsoli, to robisz to przez CTRL+D na Linuksie lub CTRL+Z na Windowsie, lub jeszcze czymś innym w zależności od środowiska.
Trudno ¯\_(ツ)_/¯Dasio11 pisze: ↑7 gru 2020, o 21:45 Będę się upierał, że o ile w kontekście czytania z pliku sensowne są sformułowania "nic nie będzie w strumieniu" albo "cały strumień wejścia" - o tyle przy wpisywaniu z klawiatury, gdzie dane są tworzone w czasie rzeczywistym, te wyrażenia już sensu nie mają. A ponieważ według polecenia program ma wczytać dane wpisane przez użytkownika, a nie pobrać je z pliku, dlatego od początku dopytuję jak powinien wyglądać program działający właśnie w tej sytuacji.
Każde narzędzie z core utilsów działa w taki sposób, a POSIX wymaga nowej linii na końcu każdego wejścia, więc raczej zaskakującym jest, że się z tym nie spotkałeś.Dasio11 pisze: ↑7 gru 2020, o 21:45 Po Twoim ostatnim poście rozumiem, że cały czas miałeś na myśli sprawdzanie flagi końca strumienia (EOF). Szczerze mówiąc nie spotkałem się nigdy z taką praktyką, gdy tekst ma być wpisany z klawiatury. Zresztą w internecie ledwo można się dokopać do informacji, jak na Windowsie poprawnie zakończyć strumień w konsoli - trzeba wcisnąć kolejno ENTER, CTRL+Z, ENTER (a zrobić tego tak, żeby wejście nie kończyło się znakiem nowej linii, chyba w ogóle się nie da).
Nie bardzo wiem, co chciałbyś poczytać. Narzędzia core utilsowe (cat, grep, sort i tak dalej) wczytują wejście i przetwarzają na wyjście. Nie ma znaczenia, czy wejście jest z konsoli czy z pliku, bo koncepcyjnie oba wejścia są tym samym (w standardzie POSIX wszystko jest plikiem).
https://github.com/coreutils/coreutils/blob/master/src/cat.c#L666
https://github.com/coreutils/coreutils/blob/master/src/cat.c#L672
https://github.com/coreutils/coreutils/blob/master/src/cat.c#L178
https://github.com/coreutils/gnulib/blob/master/lib/safe-read.c#L60
https://man7.org/linux/man-pages/man2/read.2.html
Lubię sprawdzać jak ktoś daną rzecz zrealizował koncepcyjnie.