71
FUNKCJE WEJŚCIA
musi ignorować błędne dane (tzn. pomijać ciągi znaków, które nic są liczlHimi) i kończyć działanie tylko w momencie, gdy nastąpi błąd odczytu lub koniec pliku'1.
#include <stdio.h>
int main(void)
{
int result, n; do {
result ■ scanf ("*/,d", ftn); if (result««l) {
printf ("7.d\n" , n*n*n) ;
> else if (!result) { /* łresult to to samo co result»*0 */ result ■ scanf("%*a");
> while (result!-EOF); return 0;
Zastanówmy się przez chwilę co się dzieje w programie. Najpierw wywoływana jest funkcja scanf() i następuje próba odczytu liczby typu int. Jeżeli funkcja zwróciła 1 to liczba została poprawnie odczytana i następuje wypisanie jej trzeciej potęgi. Jeżeli funkcja zwróciła 0 to na wejściu były jakieś dam*, które nie wyglądały jak liczl>a. W tej sytuacji wywołujemy funkcję scanf() z formatem odczytującym dowolny ciąg znaków nic będący białymi znakami z jednoczesnym określeniem, żeby nie zapisywała nigdzie wyniku. W ten sposób uk*poprawnic wpisana dana jest omijana. Pętla główna wykonuje się tak długo jak długo funkcja scanf() nie zwróci wartości EOF.
Więcej o funkcji scanf()
Funkcja gets służy do wczytania pojedynczej linii. Może Ci się to wydać <lziwuc, ale: funkcji tej nie należy używać pod żadnym pozorem. Przyjmuje ona jeden argument — adres pierwszego elementu tablicy. <k) którego należy zapisać odczytaną linię i nic poza tym. Z tego powodu nie ma żadnej możliwości przekazania do tej funkcji rozmiaru bufora podanego jako argument. Podobnie jak w przypadku scanf() może to doprowadzić do przepełnienia bufora, co może mieć tragiczne skutki. Zamiast tej funkcji należy używać funkcji fgcts().
Więcej o funkcji gets()
Funkcja fgets() jest bezpieczną wersją funkcji gets(), która dodatkowo może operować na dowolnych strumieniach wejściowych. Jej użycie jest następujące:
fgets(tablica_znakóv, rozmiar_tablicy_znakóv, stdin);
Na chwilę obecną nie musisz się przejmować ostatnim argumentem (jest to okreśk*-me strumienia, w naszym przypadku standardowe wejście standard input). Funkcja
3Jak rozróżniać te dwa zdarzenia dowiesz się w rozdziale Czytanie i pisanie do plików.