[C] Jak działa getchar();

0

Jadąc za wskazówkami książki napisałem taki program do zliczania słów, znaków i wierszy. Tylko nie rozumiem jak działa tutaj getchar.
Z tego co wyczytałem getchar pobiera pojedyncze znaki, a tu od razu wpisuje cały twks nie znak enter, znak enter. Dlaczego tak jest??
Chciałem tez zrobić tak aby wyczyściło ekran za pomocą system("CLS") i wyświetliło ten tekst który wpisałem ale mi to nie idzie putchar wyświetla tylko jeden znak, %c to samo a %s nie działa bo to nie jest string.

#include <stdio.h>
#include <ctype.h>
#define STOP '|'
#define TAK 1
#define NIE 0

int main(void)
{
        char x;
        int i;
        int LicznikSlow=0, LicznikZnakow=0, LicznikWierszy=0;
        int flaga=NIE;

        printf("Podaj tekst tekstu:\n");

        while((x=getchar()) != STOP)
        {
                LicznikZnakow++;
                if(x=='\n')
                {
                        LicznikWierszy++;
                }
                if(!isspace(x) && flaga==NIE)
                {
                        flaga=TAK;
                        LicznikSlow++;
                }
                if(isspace(x) && flaga==TAK)
                {
                        flaga=NIE;
                }
        }

        printf("Tekst zawiera %d slow, %d znakow, %d wierszy\n", LicznikSlow,  LicznikZnakow, LicznikWierszy);
        system("pause");
        return 0;
}
0

Bo tak naprawdę pobierane są pojedyncze znaki.

0

Czyli pobiera każdy znak po kolei i leci z pętlą??

0

No tak.

0

getchar dziala dziwnie.
pierwsze wywołanie czeka na cały tekst i naciśnięcie enter, ale zwraca tylko pierwszy znak.
kolejne wywołania w pętli zwracają kolejne znaki wpisane za pierwszym razem.

0

dziwnie? getchar próbuje zczytać 1 znak z wejścia, a jako że jedynym sposobem na podanie wejścia w standardowej konsoli (pomijam te modyfikacje typu kolory, czyszczenie, getche itp.) jest wpisanie całej linii to inna sprawa. w momencie wpisania całej linii na wejściu znajduje się już cała linia znaków (z enterem włącznie) zatem kolejne wywołania zczytają kolejne znaki z wejścia lub jeśli znów go nie będzie to znów będzie czekanie na całą linię.

0

dziwnie?
a nie?

jedynym sposobem [...] jest wpisanie całej linii
skoro getch może, to i getchar mógłby.

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