Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ANSI C] getchar, putchar i EOF na konsoli

janek_waw 15 Lip 2010 11:24 2165 2
  • #1 15 Lip 2010 11:24
    janek_waw
    Poziom 1  

    Uczę się tego języka od niedawna i doszedłem wczoraj do tych funkcji .

    Code:
    #include <stdio.h>
    

    main()

    {
    int c;

    c=getchar();

    while (c !=EOF ) {

    putchar©;

    c=getchar();

    }

    }


    Ja nie rozumiem dokładnie jak działa ten program.
    Jeżeli piszemy na ekranie załóżmy "ddd" i wciśniemy enter program oczywiście przepisuje nam dokładnie co napisaliśmy "ddd". Jeżeli teraz wciśniemy znak końca pliku EOF (Ctrl Z) program kończy działanie. Wszystko rozumiem do tego miejsca, ale dlaczego tak się dzieje że gdy piszemy znów "ddd" i na końcu wciskamy EOF program przepisuje nam to co napisaliśmy i znów musimy wcisnąć EOF żeby program zakończył działanie. Czy przez to mam rozumieć że żeby program zakończył działanie musimy już na początku lini wcisnąć EOF ?
    Czy EOF na końcu jakichś cyfr, liczb nie ma już znaczenia ?

    0 2
  • #2 16 Lip 2010 18:37
    szelus
    Specjalista - Mikrokontrolery

    Generalnie, masz rację, logiczne jest, że powinno wystarczyć wciśnięcie EOF na końcu tekstu. Ale to Windows...
    Jakby EOF to było Ctrl D, toby działało. ;)

    0
  • #3 19 Lip 2010 02:03
    Dr.Vee
    VIP Zasłużony dla elektroda

    @szelus - nie do końca :)
    W unixie CTRL-D kończy wprowadzanie z konsoli i generuje EOF w przypadku, gdy wystąpi na początku wiersza.
    Jeśli wystąpi w środku wiersza, to oznacza tylko "wyślij tekst wpisany na konsoli do aplikacji". Natomiast drugi CTRL-D wygeneruje odczyt 0 bajtów == EOF.

    @janek_waw - dużo prościej testować programy na plikach. Jeśli chodzi o wejście z konsoli, to system operacyjny buforuje wejście/wyjście w sposób, który czasem może być nieoczekiwany dla niedoświadczonego programisty. Działanie pod MS windows jest tutaj specyficzne, ale jak widać w innych systemach Twój program będzie działał podobnie.

    Pozdrawiam,
    Dr.Vee

    0