Strona 1 z 1

Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 15 sty 2011, 16:53
autor: Heron
Witam, rozpocząłem naukę języka C wraz z książką "Język ANSI C" Autor: Ritchie & Kerningham. Obecnie czytam na temat "Wejście i wyjście znakowe" i nie mogę zrozumieć zasady działania funkcji getchar() i putchar(). Niby są to funkcje operujące na łańcuchach znakowych czyli zmiennej typu char. W książce zaprezentowano programu jak poniżej:

Kod: Zaznacz cały

#include <stdio.h>

int main()
{
      int c;
      c=getchar();
      while(c != EOF) {
          putchar(c);
          c=getchar();
      }
      return 0;
}
Teraz dlaczego zmienną c autor użył jako typu int a nie char ? Po drugie mógłby mi ktoś wytłumaczyć tak szczegółowo zastosowanie i działanie funkcji getchar() oraz putchar() ? Czym jest ta zmienna EOF i jak ona działa, wiem że jest to koniec pliku czyli end of file. Ale rozumiem też że podając zmienną EOF program powinien zakończyć działanie. Jak wartość przechowuje EOF ? Po uruchomieniu programu mogę wpisać np. 'bla bla bla' i konsola wyświetli mi bla bla bla, ale wpisując nic program nie zakańcza działania, tak więc nie wiem czym jest ten 'EOF', ktoś wytłumaczy ? Mam na koniec dwa zadania, pierwsze z nich brzmi: Sprawdź, że wyrażenie getchar() != EOF może mieć wartość 0 lub 1. Nie wiem jak wykonać to zadanie. Następne to: Napisz program wypisujący wartość stałej symbolicznej EOF. I tutaj napisałem coś takiego:

Kod: Zaznacz cały

#include <stdio.h>

int main()
{
       printf(EOF);
       return 0;
}
Problem w tym, że program nie wyświetla nic, nie ma błędu żadnego ale na konsoli nie pojawia się żaden znak. Jeśli EOF to pusty znak czy coś, to wciskając enter w pierwszym programie powinien on zakończyć swoje działania ponieważ

Kod: Zaznacz cały

c != EOF
a program nigdy nie kończy swojego działania (ten z pierwszego kodu). Ktoś coś napisze na ten temat tutaj - czyli getchar(), putchar() oraz EOF ?

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 15 sty 2011, 17:10
autor: nithathak

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 15 sty 2011, 17:32
autor: dawwin
Wartość stałej EOF sprawdzisz tak:

Kod: Zaznacz cały

printf("%d\n", EOF);

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 15 sty 2011, 18:14
autor: Heron
No dobra, teraz w takim razie pokazuje mi wartość -1. Ale jeśli chodzi o kod programu kopiowania znaków i wyświetlania ich, jest w kodzie taki fragment

Kod: Zaznacz cały

while(c != EOF){}
co znaczy według mnie, że jeśli podam wartość EOF to wyjdę z pętli while i zakończę działanie programu. Wpisując jakikolwiek tekst wyświetla mi ten tekst ponownie na ekranie monitora. Wpisując -1 nie wychodzi z programu tylko nadal wypisuje -1 na ekranie. Czym jest ten warunek

Kod: Zaznacz cały

c != EOF
w while skoro i tak nie spełnia to swojej roli. Nie rozumiem tego :/

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 15 sty 2011, 18:46
autor: Hauleth
Wartość EOF w konsoli się podaje poprzez Ctrl+D a nie podawanie jej wartości liczbowej z kodu C/C++.

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 16 sty 2011, 13:10
autor: Heron
A jak to podać w konsoli w środowisku Eclipse Galileo ?

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 16 sty 2011, 15:15
autor: otokan
Heron pisze:No dobra, teraz w takim razie pokazuje mi wartość -1. Ale jeśli chodzi o kod programu kopiowania znaków i wyświetlania ich, jest w kodzie taki fragment

Kod: Zaznacz cały

while(c != EOF){}
co znaczy według mnie, że jeśli podam wartość EOF to wyjdę z pętli while i zakończę działanie programu. Wpisując jakikolwiek tekst wyświetla mi ten tekst ponownie na ekranie monitora. Wpisując -1 nie wychodzi z programu tylko nadal wypisuje -1 na ekranie. Czym jest ten warunek

Kod: Zaznacz cały

c != EOF
w while skoro i tak nie spełnia to swojej roli. Nie rozumiem tego :/
Funkcja getchar wczytuje następny znak (bajt, liczbę 0-255) z wejścia i zwraca jego wartość.
Po wczytaniu ostatniego znaku każde kolejne wywołanie funkcji zwraca EOF (-1).
EOF nie jest nigdy częścią wejścia. Nie możesz go napisać. Jak podasz -1 to getchar zwróci '-' i '1' przy kolejnych wywołaniach.

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 10 mar 2011, 23:26
autor: oko3
Witam, ja z kolei mam takie pytanie: dlaczego gdy zamiast EOF w while'u w pierwszym kodzie programu wstawiam dowolną wartość (np. c != 2) to program działa tak jakby nic się nie zmieniło i gdy wprowadzam 2 to wyświetla mi 2. Czy w takim przypadku pętla nie powinna się przerwać a program zakończyć działanie?

Odp: Podstawy C - getchar() i putchar() oraz wartość stałej symbolicznej EOF

: 11 mar 2011, 00:11
autor: kobylecki
gdy wpisujesz '2', a funkcja wczytuje ten znak '2' o wartości (numerze) 50
http://pl.wikipedia.org/wiki/ASCII
Zatem w warunku pętli sprawdzasz czy '2' != 2, czyli 50 != 2.

Wartość dwa to w kodzie ASCII start of text