Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z cin.get

Ostatnio zmodyfikowano 2013-08-25 13:35
Autor Wiadomość
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"
C/C++
#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;
}
P-79336
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.
P-79520
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).
P-79523
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??
P-79532
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.
P-79600
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??
P-79613
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.
P-90869
« 1 »
  Strona 1 z 1