problem z cin.get
Ostatnio zmodyfikowano 2013-08-25 13:35
Deamon Temat założony przez niniejszego użytkownika |
problem z cin.get » 2013-03-24 21:26:15 Nie mogę zrozumieć jednej rzeczy w tym programie dlaczego cin.get(ch) przesuwa znaki skoro cin.get() ma przede wszystkim wpisać tekst do "ch" #include <iostream> #include <conio.h> int main() { using namespace std; char ch; int spaces = 0; int total = 0; cin.get( ch ); while( ch != '.' ) { if( ch == ' ' ) ++spaces; ++total; cin.get( ch ); } cout << "W zdaniu jest " << spaces << " spacji, a lacznie "; cout << total << " znakow.\n"; getche(); return 0; }
|
|
kilroy |
» 2013-03-28 11:20:47 każde wciśnięcie klawisza podczas funkcji cin.get( ch ) (przynajmniej tej, która znajduje się w pętli) to jeden obieg twojej pętli. Więc '\n' (wciśnięcie enter) też powoduje naliczanie znaku. możesz to wyeliminować dodając przed naliczaniem znaków (++total) warunek if (ch != '\n').
Jeszcze jedno. W twoim programie dwukrotnie wpisujesz cin.get(ch); Wystarczy, że przed pętlą usuniesz tą funkcję, a w pętli napisz ją na początku, a nie na końcu. |
|
Fores |
» 2013-03-28 11:57:10 Ale tu chodzi raczej o to czemu pierwsze wywolanie cin.get(ch), umieszcza dany lancuch znakow w 'ch', a kolejne takie same robia calkowicie co innego (pobieraja po jednym znaku, a nie wczytuja). |
|
Deamon Temat założony przez niniejszego użytkownika |
» 2013-03-28 13:27:44 Tutaj właśnie chodzi mi o to co napisał Fores. Czyli dla wprowadzonego char funkcja cin.get() po prostu zachowuje się jakby przesuwała miejsca w tablicy?? |
|
Monika90 |
» 2013-03-29 23:36:19 Funkcja std::cin.get( ch ); nie przesuwa miejsc w tablicy, a w Twoim programie w ogóle nie ma żadnej tablicy. char ch; to pojedynczy znak, a nie tablica. cin.get( ch ); próbuje odczytać znak ze standardowego wejścia, i jeżeli się to uda to zapisuje ten znak, do podanego jej argumentu, (nowa wartośc zastepuje starą). A jeżeli odczyt się nie udał, (bo np. osiągnięto koniec strumienia), to cin.get( ch ); pozostawia ch bez zmian. |
|
Deamon Temat założony przez niniejszego użytkownika |
» 2013-03-30 12:51:59 Wiem że nie mam tu tablicy chodziło mi tylko o porównanie ze sposobem zachowywania się funkcji. Ale jeśli odczytuje tu znak z łańcucha ch i przypisuje pojedynczy znak do ch to dlaczego po kolejnym wywołaniu cin.get(ch) nie odnosi się tylko do tego pojedynczego znaku tylko do wcześniejszego łańcucha?? |
|
DejaVu |
» 2013-08-25 13:35:57 @Deamon: niestety nie rozumiesz tego co Monika90 napisała. Jeden znak jest odczytywany ze strumienia wejściowego i tym samym z niego kasowany. To, że na ekranie coś jest wyświetlone to nie znaczy, że jest to zapisane w jakiejkolwiek zmiennej. Temat zamykam bo jest już wiekowy i właściwa odpowiedź już tu padła. |
|
« 1 » |