ANSI C 9

ANSI C 9



1 ELEMENTARZ

#include <stdio.h>

/* zlicz znaki wejściowe; wersja 2 */ main()

{

double nc;

for (nc = 0; getchar() != EOF; ++nc)

i

printff^&.Ofyi”, nc);

}

Funkcja printf używa formatu %f dla obu typów zmiennopozycyjnych float i double. Specyfikacja %.0f zapobiega wypisywaniu kropki dziesiętnej i części ułamkowej, która ma wartość zero.

W tym przypadku treść pętli for jest pusta, ponieważ cała praca zostanie wykonana w jej częściach: warunkowej i przyrostu. Zasady gramatyki języka C wymagają jednak, aby pętla for miała treść. Samotny średnik, zwany instrukcją pustą, spełnia to wymaganie. Napisaliśmy go w osobnym wierszu, żeby był bardziej widoczny.

Zanim porzucimy program zliczania znaków, zwróć uwagę na to, że jeśli plik wejściowy nie zawiera żadnych znaków, to warunek w pętli while czy for będzie fałszywy już przy pierwszym wywołaniu funkcji getchar. W tym przypadku program wypisze wartość zero, która jest odpowiedzią poprawną. Jest to bardzo ważne. Jedną z milszych cech instrukcji while i for jest to, że sprawdzenie warunku odbywa się zawsze na początku pętli, przed wykonaniem jej treści. Gdy nie ma nic do zrobienia, nic nie będzie zrobione, nawet jeśli oznacza to, że pętla nigdy się nie wykona. Program powi nien postępować inteligentnie nawet wówczas, gdy jego strumień wejściowy ma długość zero. Instrukcje while i for wspomagają podejmowanie odpowiednich dział w sytuacjach wyjątkowych.

1.5.3 Zliczanie wierszy

Kolejny program zlicza wiersze pliku wejściowego. Jak już wspomnieliśmy, biblii teka standardowa zapewnia, że w wejściowym strumieniu znaków tekst jest ciągiei wierszy zakończonych znakiem nowego wiersza. Dlatego też zliczanie wierszy polej po prostu na zliczaniu znaków nowego wiersza.

1*5 WEJŚCIE I WYJŚCIE ZNAKOWE

powered by

mTsTo!


#include <stdio.h>

/* zlicz wiersze wejściowe */ main()

{

int c, nl;

nl = 0;

while ((c = getchar()) != EOF) if (c == ’\n’)

++nl;

printf(,,%d\n,,t nl);

Tym razem pętla while składa się z instrukcji if, która czuwa nad zwiększaniem licznika ++nl. Instrukcja ta sprawdza warunek ujęty w nawiasy okrągłe i, jeśli warunek jest prawdziwy, wykonuje następującą po niej instrukcję (lub grupę instrukcji zawartych w nawiasach klamrowych). Znów musimy wyjaśnić, co czym steruje.

W języku C podwójny znak równości == oznacza operator relacji „równe” (jak pojedynczy znak = w Pascalu czy .EQ. w Fortranie). Symbol ten wprowadzono po to, by odróżnić test na równość od znaku = oznaczającego przypisanie. Tu mała przestroga: nowicjusze w języku C niekiedy piszą = mając na myśli = = . Jak zobaczymy w rozdz. 2, w wyniku powstaje poprawne wyrażenie, tak że nie spodziewaj się komunikatu ostrzegającego o błędzie \

Znak zawarty między dwoma apostrofami reprezentuje wartość całkowitą równą numerycznej wartości kodu tego znaku, określoną na podstawie maszynowego zbioru znaków. Jest to tzw. stała znakowa, choć w rzeczywistości stanowi jedynie inny sposób zapisania niewielkiej liczby całkowitej. Przykładowo: ’A’ jest stałą znakową; dla zbioru znaków ASCII jej wartością jest 65, czyli wartość wewnętrznej reprezentacji znaku A. Oczywiście lepiej jest stosować stałą ’A’ niż liczbę 65; znaczenie stałej jest oczywiste, a także nie zależy od konkretnego zbioru znaków.

Sekwencje specjalne używane w stałych napisowych są także poprawne w stałych znakowych, a więc stała znakowa ’\n’ oznacza wartość znaku nowego wiersza, która dla zbioru znaków ASCII równa się 10. Musisz na zawsze zapamiętać, że stała ’\n* jest jednym znakiem i że w wyrażeniach jest równoważna jednej liczbie całkowitej. Natomiast stała napisowa ”\n” jest ciągiem znaków, który przypadkowo tylko zawiera jeden znak. O znakach i napisach pomówimy szerzej w rozdz. 2.

Niektóre przyzwoite kompilatory w sytuacjach wątpliwych produkują jednak komunikaty ostrzegawcze. - Przyp. tłum.

41


Wyszukiwarka

Podobne podstrony:
ANSI C 9 5 WSKAŹNIK! I TABLICE ________— A oto program: #include <stdio.h> #include
ANSI C 8 7 WEJŚCIE I WYJŚCIE #include <stdio.h> /* cat: sklej zawartość plików, wersja 2 */
ANSI C 0 1 ELEMENTARZ Ćwiczenie 1.8. Napisz program zliczający znaki odstępu, tabulacji i nowego
ANSI C 2 1 ELEMENTARZ 1 ELEMENTARZ ’

ANSI C 9 7 WEJŚCIE I WYJŚCIE Aby wykazać, że nie ma nic magicznego w takich funkcjach, jak fgets i
faq pliki1 #include <stdio.h> #include <conio.c> //I #include <fstrearn> int
fopen2 #include <stdio.h> FILE * fopen(char * ścieżka, char * typ);
foto 9 •    Elementy rolnictwa precyzyjnego: •    zebranie informacji
fprintf1 #include <stdio.h> int fprintf(FILE * stream, char * Format[, wartość,...]); int fsca
Image2 #include <stdio.h> int main () // kod znaku 0 = 4
Image3 **************************************************** ■-V #include <stdio.h>) . Vj^/int

więcej podobnych podstron