Funkcje getchar() i putchar() oraz stała symboliczna EOF

0

Witam, rozpocząłem naukę języka ANSI C, właśnie czytam książkę "Język ANSI C" i dotarłem do rozdziału 1.5 Wejście i wyjście - kopiowanie plików, który zarazem stanowi dla mnie pewien problem. Nie do końca rozumiem funkcję getchar() oraz putchar(), dlaczego skoro w nazwie getchar() i putchar() powinno stosować się char to jednak stosują wszędzie takie zmienne jak int oraz long ? W książce, autor przedstawił poniższy przykład:

#include <stdio.h>

int main()
{
	int c;

	c = getchar();
	while(c != EOF){
		putchar(c);
		c = getchar();
	}
	return 0;
}
 

Działanie ów programu wygląda tak, że co wpiszemy na konsolę to, to samo zostanie wyświetlone linię niżej, np. wpiszemy "bla bla bla" a niżej wyświetli się: bla bla bla. Program działa tak w nieskończoność z rozumiem, że fragment w pętli while:

c != EOF 

mówi o tym, że zakończy on swoje działanie jeśli wprowadzona wartości będzie równa EOF. Sprawdziłem, że EOF wynosi -1. Nie wiem czy poprawnie to sprawdziłem. Ale powyższy program wyświetla również dla -1: -1 na konsoli i dalej pętla się toczy a program nie kończy. Nie rozumiem tego.
Na koniec tego rozdziału mam dwa zadania których kompletnie nie rozumiem i nie wiem jak rozwiązać:

  1. Sprawdź, że wyrażenie getchar() != EOF może mieć wartość 0 lub 1.
  2. Napisz program wypisujący wartość stałej symbolicznej EOF.
    Proszę o trochę informacji rozświetlających dany temat, następne rozdziały to rozbudowywanie tego typu programów a więc stoję w kropce a chcę się nauczyć programować w C/C++. Z góry dzięki!
0

Bo dla -1 ma wyświetlić -1. EOF to jest znak specjalny, a wartość stałej EOF to jest tylko wartość, którą zwracają funkcje biblioteki standardowej przy napotkaniu wartości EOF. Jak chcesz ją wprowadzić z konsoli to kliknij Ctrl+D (GNU/Linux).

0

printf("%i",EOF);
EOF = Ctrl+Z (Enter) w Windows

0

EOF to end of file stała symboliczna która nie ma wartości w ASCII (a zwykłe znaki, jak 'a' czy inne litery mają), więc Twoja pętla działa aż napotka na taki włąśnie symbol który poinformuje ją że plik się skończył. W tym rozdziale masz nawet krótki komentarz na ten temat, zaraz po kodzie programu. W zmienna char to nic innego jak wartość liczbowa, a funkcja getchar zwraca int.

0

Co do tego pierwszego zadania (1. Sprawdź, że wyrażenie getchar() != EOF może mieć wartość 0 lub 1.) chodzi o to czy można wprowadzić wartość 1 i 0 i czy program się nie wysypie, tak ? :/

0

Nie, to oznacza dokładnie to, że getchar() != EOF da wartość 1 lub 0 a dokładniej prawda lub fałsz.

0

No dobra a jak to sprawdzić ? Chodzi o zadanie jak to wykazać że może mieć 1 lub 0 czyli prawdę lub fałsz ? :/

0

printf("%d", getchar() != EOF);

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