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 »  |