Podstawy informatyki - Wydział Elektryczny

Transkrypt

Podstawy informatyki - Wydział Elektryczny
Podstawy informatyki
Politechnika Białostocka - Wydział Elektryczny
Elektrotechnika, semestr II, studia niestacjonarne
Rok akademicki 2006/2007
Wykład nr 2 (16.03.2007)
dr inŜ. Jarosław Forenc
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
Plan wykładu nr 2
Operacje wejścia/wyjścia w języku C, strumienie, pliki
Operacje na plikach
otwarcie pliku
zamknięcie pliku
Pliki tekstowe i binarne
dr inŜ. Jarosław Forenc
2/34
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
3/34
Operacje wejścia/wyjścia, strumienie, pliki
operacje wejścia/wyjścia nie są elementami języka C - zrealizowano je jako funkcje
zewnętrzne, znajdujące się w bibliotekach dostarczanych wraz z kompilatorem
podstawowym pojęciem związanym z operacjami wejścia/wyjścia w języku C jest
strumień (ang. stream)
strumień jest pojęciem abstrakcyjnym - nazwa strumień bierze się z analogii
między przepływem danych, a np. wody
w strumieniu dane płyną od źródła do odbiorcy,
a zadaniem uŜytkownika jest określenie źródła
i odbiorcy, wybór typu danych oraz sposobu
ich przesyłania
strumień moŜe być skojarzony ze zbiorem
danych na dysku lub zbiorem danych
pochodzących z urządzenia znakowego,
np. klawiatury
strumienie reprezentowane są przez zmienne
będące wskaźnikami na struktury typu FILE
(definicja w pliku nagłówkowym stdio.h)
typedef struct _iobuf
{
char* _ptr;
int
_cnt;
char* _base;
int
_flag;
int
_file;
int
_charbuf;
int
_bufsiz;
char* _tmpfname;
} FILE;
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
4/34
Operacje wejścia/wyjścia, strumienie, pliki
gdy program rozpoczyna działanie otwarte są trzy standardowe strumienie
wejścia/wyjścia:
stdin - standardowe wejście (konsola - klawiatura)
stdout - standardowe wyjście (konsola - monitor)
stderr - standardowe wyjście dla komunikatów o błędach (konsola - monitor)
definicje powyŜszych strumieni oraz prototypy funkcji wejścia/wyjścia umieszczone
są w pliku nagłówkowym stdio.h
strumień wiąŜe się z plikiem za pomocą otwarcia, zaś połączenie to jest
przerywane przez zamknięcie strumienia
wszystkie operacje związane z przetwarzaniem pliku zazwyczaj składają się
z trzech części:
1. Otwarcie pliku (strumienia)
2. Operacje na pliku (strumieniu), np. czytanie, pisanie
3. Zamknięcie pliku (strumienia)
kaŜdy strumień moŜe pracować w trybie binarnym lub tekstowym
tryb pracy strumienia moŜna określić podczas jego otwierania
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
5/34
Operacje na plikach - otwarcie pliku
do otwarcia pliku słuŜy funkcja fopen(), która wiąŜe plik ze strumieniem
FOPEN
stdio.h
FILE* fopen(const char *fname, const char *mode);
fname jest łańcuchem znaków zawierającym nazwę otwieranego pliku, nazwa
moŜe zawierać całą ścieŜkę dostępu do pliku
mode określa tryb otwarcia pliku (rodzaj dostępu do pliku), jako tryb otwarcia
pliku moŜe występować:
”r”
”w”
- czytanie
- zapisywanie, jeśli pliku nie ma to zostanie on utworzony, jeśli jest, to jego
poprzednia zawartość zostanie usunięta
”a”
- dopisywanie - na końcu istniejącego pliku lub od początku nowego
”r+” - otwarcie istniejącego pliku do czytania i pisania (aktualizacji)
”w+” - utworzenie nowego pliku do czytania i pisania (aktualizacji), istniejący plik
zostanie zamazany
”a+” - dopisywanie na końcu pliku z moŜliwością czytania
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
6/34
Operacje na plikach - otwarcie pliku
funkcja fopen() zwraca wskaźnik na strukturę FILE skojarzoną z otwartym plikiem
lub NULL, w przypadku, gdy otwarcie pliku nie powiodło się
po otwarciu pliku odwołujemy się do niego przez wskaźnik pliku
dodanie litery t w trybie otwarcia oznacza otwarcie pliku w trybie tekstowym
(domyślne), natomiast dodanie litery b oznacza otwarcie pliku w trybie binarnym
Przykład:
FILE *stream1, *stream2;
stream1 = fopen(”dane.txt”,”r”);
stream2 = fopen(“c:\\baza\\data.bin”,”wb”);
plik dane.txt otwierany jest w trybie tekstowym tylko do czytania
pliku data.bin otwierany jest w trybie binarnym tylko do zapisu
przy podawaniu ścieŜki dostępu do pliku, zamiast jednego znaku \ naleŜy
podawać dwa znaki - \\
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
7/34
Operacje na plikach - zamknięcie pliku
plik zamykany jest funkcją fclose()
FCLOSE
int fclose(FILE *stream);
funkcja fclose() zwraca zero jeśli zamknięcie pliku było pomyślne lub EOF
w przypadku wystąpienia błędu
po zamknięciu pliku wskaźnik stream moŜe być wykorzystany do otwarcia
innego pliku
w programie moŜe być jednocześnie otwartych wiele plików
stdio.h
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
8/34
Operacje na plikach - przykład
#include <stdio.h>
int main()
{
FILE *stream;
stream = fopen("plik.txt","w+");
if (stream == NULL)
{
printf("Blad otwarcia pliku.\n");
return (-1);
}
/* przetwarzanie pliku */
fclose(stream);
return (0);
}
Otwarcie i zamknięcie pliku
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
Pliki tekstowe i binarne
wyróŜnia się dwa rodzaje plików: tekstowe i binarne
elementami pliku tekstowego są wiersze, mogą one mieć róŜną długość
w systemie DOS/Windows kaŜdy wiersz pliku zakończony jest parą znaków:
CR, ang. carriage return - powrót karetki, kod ASCII - 1310 (0D16)
LF, ang. line feed - przesunięcie o wiersz, kod ASCII - 1010 (0A16)
załóŜmy, Ŝe plik tekstowy ma postać:
rzeczywista zawartość pliku jest następująca:
wydruk zawiera: przesunięcie od początku pliku (szesnastkowo), wartości
poszczególnych bajtów pliku (szesnastkowo) i znaki odpowiadające tym
wartościom (traktując wartości jako kody ASCII)
9/34
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
10/34
Pliki tekstowe i binarne
w czasie wczytywania tekstu z pliku do pamięci komputera znaki CR i LF
zastępowane są jednym znakiem - LF
znak LF w języku C reprezentowany jest przez \n, zaś CR - przez \r
#include <stdio.h>
10 A
int main()
{
printf("%d %h",‘\n‘,‘\n‘);
return (0);
}
przy zapisywaniu łańcucha znaków do pliku tekstowego mamy sytuację odwrotną znak LF zastępowany jest parą CR i LF
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
11/34
Pliki tekstowe i binarne
w systemie Linux znakiem końca wiersza jest tylko LF o kodzie ASCII - 1010 (0A16)
załóŜmy, Ŝe plik tekstowy ma postać:
rzeczywista zawartość pliku jest następująca:
podczas przesyłania pliku tekstowego (np. przez protokół ftp) z systemu Linux
do systemu DOS/Windows pojedynczy znak LF zamieniany jest automatycznie
na parę znaków CR i LF
błędne przesłanie pliku tekstowego (w trybie binarnym) powoduje nieprawidłowe
jego wyświetlanie:
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
12/34
Operacje we/wy w języku C - funkcja printf()
PRINTF
stdio.h
int printf(”tekst opcjonalny+specyfikator”,argumenty);
funkcja printf() wyprowadza tekst, gdy w tekście występuje specyfikator
(specyfikator formatu) zaczynający się od %, to następuje przekształcenie w miejsce specyfikatora wstawiana jest wartość argumentu
specyfikator formatu określa typ oraz sposób wyświetlania zmiennej na ekranie
liczba specyfikatorów formatu musi być zgodna z liczbą argumentów
jeśli typ argumentu zostanie błędnie określony to na ekranie wyświetlona
zostanie nieprawidłowa wartość
funkcja printf() zwraca liczbę wyprowadzonych bajtów lub EOF jeśli wystąpił błąd
specyfikator formatu ma następującą postać:
specyfikator = %[znacznik][szerokość][.precyzja][modyfikator]typ
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
Operacje we/wy w języku C - funkcja printf()
specyfikator = %[znacznik][szerokość][.precyzja][modyfikator]typ
typ
- określa rodzaj i typ argumentu:
d, i
u
x, X
o
f
e, E
g, G
s
c
-
liczba całkowita ze znakiem, dziesiętna
liczba całkowita bez znaku, dziesiętna
liczba całkowita bez znaku, szesnastkowa
liczba całkowita bez znaku, ósemkowa
liczba rzeczywista w postaci [-]ddd.ddd
liczba rzeczywista w formacie „naukowym” (z uŜyciem e lub E)
[-]d.ddd…e[+/-]ddd lub [-]d.ddd…E[+/-]ddd
- liczba rzeczywista (format f lub e)
- ciąg znaków
- pojedynczy znak
13/34
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
14/34
Operacje we/wy w języku C - funkcja printf()
specyfikator = %[znacznik][szerokość][.precyzja][modyfikator]typ
[znacznik]
- ”+” - przed liczbą stawiany jest znak (plus lub minus)
”-” - wyrównanie wyświetlanych znaków do lewej strony
” ” - spacja, jeśli wartość jest nieujemna, zamiast plus będzie wyświetlana spacja,
w przypadku wartości ujemnych będzie wyświetlany minus
[szerokość]
- określa minimalną liczbę wyprowadzanych znaków, jeśli znaków jest mniej to
pole jest z lewej strony uzupełniane spacjami, jeśli więcej - podana szerokość
jest ignorowana
[.precyzja]
- liczba znaków po kropce dziesiętnej
[modyfikator]
- słuŜy do zmodyfikowania podstawowego typu podawanego przez znak typu:
l
- stosowany tylko do liczb całkowitych do wyświetlania wartości typu
long (moŜe stać przed d, i, o, u, x, X, O, np. %ld, %li)
L
- stosowany do wyświetlania wartości rzeczywistych typu
long double
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
15/34
Operacje we/wy w języku C - funkcja scanf()
SCANF
stdio.h
int scanf(”specyfikator+tekst”,argumenty);
funkcja scanf() wczytuje znaki ze standardowego wejścia (klawiatura), interpretuje
je zgodnie z zadanym specyfikatorem (specyfikatorem formatu) i przypisuje wyniki
argumentom w odpowiedniej kolejności
jeśli obok specyfikatora formatu pojawia się dodatkowa sekwencja znaków,
to powinna jej odpowiadać sekwencja znaków w czytanym polu - znaki te
zostaną przeczytane, ale nie będą zapamiętane
funkcja scanf() zwraca liczbę argumentów, którym poprawnie nadano wartości
lub EOF po napotkaniu znacznika końca pliku
specyfikator formatu ma następującą postać:
specyfikator = %[szerokość][modyfikator]typ
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
16/34
Operacje we/wy w języku C - funkcja scanf()
specyfikator = %[szerokość][modyfikator]typ
typ
- określa rodzaj i typ argumentu:
d
- liczba całkowita dziesiętna, typ int
D
- liczba całkowita dziesiętna, typ long
o
- liczba całkowita ósemkowa, typ int
- liczba całkowita ósemkowa, typ long
O
- liczba całkowita szesnastkowa, typ int
x
X
- liczba całkowita szesnastkowa, typ long
- liczba całkowita dziesiętna, ósemkowa lub szesnastkowa, typ int
i
I
- liczba całkowita dziesiętna, ósemkowa lub szesnastkowa, typ long
- liczba całkowita dziesiętna bez znaku, typ unsigned
u
U
- liczba całkowita dziesiętna bez znaku, typ unsigned long
f, e, E - liczba rzeczywista, typ float
g, G
- liczba rzeczywista, typ float
- ciąg znaków
s
c
- pojedynczy znak, typ char
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
17/34
Operacje we/wy w języku C - funkcja scanf()
specyfikator = %[szerokość][modyfikator]typ
[szerokość]
- określa ile znaków zostanie przeczytanych
[modyfikator]
- słuŜy do zmodyfikowania podstawowego typu podawanego przez znak typu:
l
- zmienia wszystkie typy całkowitoliczbowe na ich długie wersje;
zastosowany do znaków typu f, e, E, g, G spowoduje interpretację
zawartości pól wejściowych jako liczb typ double
L
- zastosowany do znaków typu f, e, E, g, G spowoduje interpretację
zawartości pól wejściowych jako liczb typ long double
h
- typy całkowitoliczbowe będą traktowane jako short
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
18/34
Operacje we/wy w języku C - przykład
Podaj date (rrrr-mm-dd): 2007-03-14
#include <stdio.h>
#include <stdlib.h>
Rok:
Miesiac:
Dzien:
int main()
{
int
r,m,d;
2007
3
14
printf("Podaj date (rrrr-mm-dd): ");
scanf("%d-%d-%d",&r,&m,&d);
printf("\n");
printf("Rok:
printf("Miesiac:
printf("Dzien:
%d\n",r);
%d\n",m);
%d\n",d);
system("pause");
return 0;
}
Wczytanie daty funkcją scanf
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
19/34
Operacje we/wy w języku C - „rodzina” funkcji printf()
funkcja printf() ma swoją „rodzinę” funkcji, które przyjmują specyfikację formatu
według takich samych reguł jak printf()
PRINTF
stdio.h
int printf(const char *format, ...);
printf() wyprowadza dane do strumienia stdout (ekran)
FPRINTF
stdio.h
int fprintf(FILE *stream, const char *format, ...);
fprintf() wyprowadza dane do otwartego strumienia wskazywanego przez stream
SPRINTF
int sprintf(char *bufor, const char *format, ...);
sprintf() wyprowadza dane bufora pamięci wskazywanego przez bufor
stdio.h
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
20/34
Operacje we/wy w języku C - przykład
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
FILE *stream;
int i;
if ((stream=fopen("plik.txt","w")) == NULL)
{
printf("Blad otwarcia pliku\n");
return (-1);
}
3
51
93
10
93
64
63
0
46
24
srand(time(NULL));
for (i=0; i<10; i++)
fprintf(stream,"%d\n",rand());
fclose(stream);
system("pause");
return 0;
}
Zapisanie do pliku tekstowego 10 wygenerowanych pseudolosowo liczb
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
21/34
Operacje we/wy w języku C - „rodzina” funkcji scanf()
funkcja scanf() ma swoją „rodzinę” funkcji, które przyjmują specyfikację formatu
według takich samych reguł jak scanf()
SCANF
stdio.h
int scanf(const char *format, ...);
scanf() wprowadza dane ze strumienia stdin (klawiatura)
FSCANF
stdio.h
int fscanf(FILE *stream, const char *format, ...);
fscanf() czyta dane z otwartego strumienia stream do listy argumentów
SSCANF
int sscanf(const char *bufor, const char *format, ...);
sscanf() wprowadza dane z bufora pamięci bufor do argumentów
stdio.h
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
22/34
Operacje we/wy w języku C - przykład
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
FILE *stream;
int i, x;
if ((stream=fopen("plik.txt","r")) == NULL)
{
printf("Blad otwarcia pliku\n");
return (-1);
}
3
51
93
10
93
64
63
0
46
24
fscanf(stream,"%d",&x);
while(!feof(stream))
{
printf("%d\n",x);
fscanf(stream,"%d",&x);
}
fclose(stream);
system("pause");
return 0;
}
Odczytanie liczb z pliku tekstowego i wyświetlenie ich na ekranie
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
23/34
Operacje we/wy w języku C - przykład
Uwagi do przykładu:
sposób zapisu liczb w pliku wejściowym nie ma znaczenia dla prawidłowości ich
odczytu
liczby powinny być oddzielone od siebie znakami spacji, tabulacji lub znakiem
nowego wiersza
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
24/34
Operacje na plikach binarnych
FREAD
stdio.h
size_t fread(void *p, size_t s, size_t n, FILE *stream);
funkcja fread() czyta n elementów o rozmiarze s bajtów kaŜdy z pliku
wskazywanego przez stream i umieszcza odczytane dane w obszarze pamięci
wskazywanym przez p
FWRITE
stdio.h
size_t fwrite(const void *p, size_t s, size_t n, FILE *stream);
funkcja fwrite() zapisuje n elementów o rozmiarze s bajtów kaŜdy do pliku
wskazywanego przez stream biorąc dane z obszaru pamięci wskazywanego przez p
obie funkcje, fread() i fwrite(), zwracają liczbę przetworzonych (zapisanych
lub odczytanych elementów) - liczba ta jest róŜna od n, gdy wystąpił błąd końca
strumienia (czytanie) lub błąd zapisu
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
25/34
Operacje na plikach binarnych - przykład
#include <stdio.h>
int main()
{
FILE *plik;
int
d1 = 15, d2;
float tab1[5]={1.0,2.0,3.0,4.0,5.0};
float tab2[5];
plik = fopen("data.bin","wb");
fwrite(&d1,sizeof(int),1,plik);
fwrite(tab1,sizeof(float),5,plik);
fclose(plik);
plik = fopen("data.bin","rb");
fread(&d2,sizeof(int),1,plik);
fread(tab2,sizeof(tab2),1,plik);
fclose(plik);
return 0;
}
Operacje na pliku binarnym
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
26/34
Operacje na plikach binarnych - przykład
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *plik;
int liczba;
plik = fopen("plik.bin","rb");
37
31
83
27
6
62
31
50
fread(&liczba,sizeof(int),1,plik);
while(!feof(plik))
{
printf("%d\n",liczba);
fread(&liczba,sizeof(int),1,plik);
}
fclose(plik);
system("pause");
return 0;
}
Wyświetlenie zawartości pliku binarnego zawierającego liczby typu int
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
27/34
Operacje na plikach binarnych - przykład
po otwarciu pliku ustawiany jest specjalny wskaźnik, który określa pozycję, z której
będą odczytywane dane - przy otwarciu pliku do czytania jest to początek pliku
po odczytaniu jednej liczby: fread(&liczba,sizeof(int),1,plik); wskaźnik jest
automatycznie przesuwany o sizeof(int) bajtów
po odczytaniu kolejnej liczby: fread(&liczba,sizeof(int),1,plik); wskaźnik jest
ponownie przesuwany o sizeof(int) bajtów
na powyŜszym rysunku moŜna zaobserwować sposób zapisu liczb typu int
w pliku binarnym
zawartość pliku jest następująca: 37 31 83 27 6 62 31 50
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
28/34
Operacje we/wy w języku C - funkcja getc()
GETC
stdio.h
int getc(FILE *stream);
funkcja getc() czyta jeden znak z aktualnej pozycji otwartego strumienia stream
i uaktualnia pozycję
zmienna stream powinna wskazywać strukturę FILE reprezentującą otwarty
strumień skojarzony z otwartym plikiem (moŜe to być jeden ze standardowo
otwartych strumieni, np. stdin)
funkcja zwraca wartość całkowitą kodu wczytanego znaku lub wartość EOF jeśli
wystąpił błąd lub przeczytany został znacznik końca pliku
Przykład:
int znak;
znak = getc(stdin);
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
29/34
Operacje we/wy w języku C - funkcja putc()
PUTC
stdio.h
int putc(int znak, FILE *stream);
funkcja putc() wypisuje znak do otwartego strumienia reprezentowanego przez
argument stream
zmienna stream powinna wskazywać strukturę FILE reprezentującą otwarty
strumień skojarzony z otwartym plikiem (moŜe to być jeden ze standardowo
otwartych strumieni, np. stdout)
jeśli wykonanie zakończyło się poprawnie funkcja zwraca wypisany znak lub
wartość EOF jeśli wystąpił błąd
Przykład:
int znak;
putc(znak,stdout);
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
30/34
Operacje we/wy w języku C - funkcja gets()
GETS
stdio.h
char* gets(char *s);
funkcja gets() czyta do bufora pamięci wskazywanego przez argument s linię
znaków ze strumienia stdin (standardowo klawiatura)
wczytywanie jest kończone po napotkaniu znacznika nowej linii ’\n’
znacznik nowej linii ’\n’ zastępowany jest znakiem końca łańcucha ’\0’
funkcja gets() umoŜliwia wczytanie łańcucha zawierającego spacje i tabulatory
jeśli wykonanie zakończyło się poprawnie, to funkcja gets() zwraca wskazanie
do łańcucha s lub NULL jeśli napotka znacznik końca pliku lub gdy wystąpił błąd
Przykład:
char s[80];
gets(s);
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
31/34
Operacje we/wy w języku C - funkcja puts()
PUTS
stdio.h
int puts(const char *s);
funkcja puts() wypisuje łańcuch s do strumienia stdout (standardowo ekran),
zastępując znak ’\0’ znakiem ’\n’
jeśli wykonanie zakończyło się poprawnie, to funkcja puts() zwraca ostatni
wypisany znak lub EOF jeśli wystąpił błąd
Przykład:
char s[80];
gets(s);
/* ... */
puts(s);
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
32/34
Operacje we/wy w języku C - funkcje fgetc() i fputc()
FGETC
stdio.h
int fgetc(FILE *stream);
funkcja fgetc() czyta jeden znak ze strumienia wskazywanego przez stream
zwraca przeczytany znak po przekształceniu go na typ int jeśli wykonanie
zakończyło się poprawnie lub EOF jeśli wystąpił błąd lub jeśli został przeczytany
znacznik końca pliku
FPUTC
stdio.h
int fputc(int znak, FILE *stream);
funkcja fputc() pisze znak do otwartego strumienia reprezentowanego przez
argument stream
jeśli wykonanie zakończyło się poprawnie zwraca wypisany znak lub EOF jeśli
wystąpił błąd
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
33/34
Operacje we/wy w języku C - przykład
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *plik;
int
chr;
plik=fopen("plik.txt","r+");
while ((chr=fgetc(plik))!=EOF)
printf("%c",chr);
fclose(plik);
system("pause");
return 0;
}
Wyświetlenie zawartości pliku tekstowego
Podstawy informatyki (st. niestacjonarne, 2006/2007)
Wykład nr 2
dr inŜ. Jarosław Forenc
34/34
Operacje we/wy w języku C - funkcje fgets() i fputs()
FGETS
stdio.h
char* fgets(char *s, int ile, FILE *stream);
czyta do bufora pamięci wskazanego przez s co najwyŜej ile-1 znaków z otwartego
strumienia reprezentowanego przez stream, kończy czytanie po napotkaniu
znacznika końca linii ’\n’
po ostatnim przeczytanym znaku wstawia znak ’\0’ do bufora s, tworząc łańcuch
jeśli wykonanie zakończyło się poprawnie to zwraca wskazanie do łańcucha s
lub NULL jeśli napotka znacznik końca pliku albo gdy wystąpił błąd
FPUTS
stdio.h
int fputs(const char *s, FILE *stream);
wypisuje łańcuch s do strumienia stream, nie dołącza znaku końca wiersza ’\n’
jeśli wykonanie zakończyło się poprawnie to zwraca ostatni wypisany znak lub EOF
jeśli wystąpił błąd