Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdFerdinand Mulder Laatst gewijzigd meer dan 9 jaar geleden
1
tircms02-p les 4 Preprocessor In- en uitvoer Diversen
2
Preprocessor Een preprocessor faciliteit dient om de compiler van te voren te laten manipuleren met tekst voordat het eigenlijk compileren gebeurt. #Define AANTAL 1000 Nu wordt overal voor AANTAL 1000 ingevuld AANTAL heet macro De hele regel heet macrodefinitie #define identifier string
3
Preprocessor Voorbeeld #define max(a,b) ((a)>(b) ? (a) : (b) ) statement: y= 2 * max(i+1, j-1) +3; Expansie y= 2 * ((i+1) > (j-1) ? (i+1) : (j-1)) +3 Haakjes zijn noodzakelijk Bij macro wordt de code in-line geplaatst
4
Preprocessor Bij een macro wordt de code in-line geplaatst dwz dat de macrocode in het programma geplaatst wordt Bij een functie wordt de code 1-malig in programma geplaatst Voordeel macro : is sneller dan functie Nadeel macro: het kost meer geheugen
5
Preprocessor #include “HULPTEKST” Nu wordt gezocht naar de file HULPTEKST in onze eigen directory, daarna in systeemdirectories #include Nu wordt alleen in de systeemdirectories gezocht.h zijn headerfiles #include regels kunnen genest zijn
6
In-en uitvoer Printf ( format-string, arg1, arg 2,..) formatstring bevat: karakters, conversiespecificaties Conversiekarakters: d,o,x,u,c,s,f,e,g Tussen % en conversiekarakter: -teken, veldbreedte, een punt., precisie, l
7
Printf printf(“%-10.6s???%c\n”,”Vreemde dingen”,’!’); Geeft: Vreemd ???! zonder – teken geeft dit Vreemd???! De functiewaarde die afgegeven wordt is gelijk aan het aantal overgedragen karakters of negatief bij een foutmelding
8
Scanf scanf(formatstring, arg1, arg2, ….); formatstring bevat: karakters, conversiespecificaties Conversiekarakters: d,o,x,c,s,f Tussen % en conversiekarakter: *, de maximale veldbreedte
9
Scanf int i,j,k; char str[6], ch; float x; scanf(“%c %d %f ++ %3d %2d %*d %s”, &ch, &i, &x, &j, &k,str); invoer: q 123 3.14++98765432 abc geeft: ch =‘q’, i=123, x =3.14, j= 987, k=65, str=“abc\0”
10
Files 1. #include 2. main () 3. { 4. FILE *p, *q, *fopen(); 5. char ch; 6. p=fopen(“fff”, "r"); 7. q=fopen(“ggg”, "w"); 8. while (( ch=getc(p)) !=EOF) putc(ch, q); 9. }
11
EOF(ff f)? open file fff en ggg be gi n Schrijf karakter naar file ggg en d Lees kar uit file fff ja Flowchart
12
Files EOF = -1 ( 16 bit), eigenlijk checken op integer, maar char gaat in dit geval ook goed File is een type ( een structure) in stdio.h staat: typedef struct { … } FILE; Er dient een FCB (filecontrol block) te worden gemaakt. met FILE *p, *q, *fopen(); onstaan pointers naar FCB
13
Files Met p = fopen(“fff”,”r”); ontstaat een FCB ( er wordt een file geopend) De functiewaarde die fopen aflevert is een pointer naar gecreerde control block met ch = getc(p) wordt een karakter gelezen uit de file dmv pointer die afgeleverd wordt door fopen openen voor r,w,a
14
Files p file pointer file control block file werkgeheugendisk *pfff q*qggg
15
Files ch=getchar() ch=getc(stdin) putchar(ch) putc(ch, stdout) fgets(str,maxlen,p) leest 1 regel uit een file fputs(str,p) schrijft 1 regel naar een file gets(str) leest een regel van toetsenbord putst(str) schrijft regel naar beeldscherm
16
Goto goto ginds.... ginds: x = y +1; Met exit(0); wordt uit een functie gesprongen en alle files gesloten
17
Programma-argumenten 1. #include 2. FILE *openen 3. main(argc, argv) int argc; char *argv[]; 4. { FILE *pin1, *pin2, *puit, *fopen(); char ch; 5. if (argc !=4) 6. { printf(“3 argumenten vereist\n”’; exit(0);} 7. else 8. { pin1=openen(argv[1], “r”); 9. pin2=openen(argv[2], “r”); 10. puit=openen(argv[3], “w”); 11. while ((ch=getc(pin1)) !=EOF ) putc(ch,puit); 12. while ((ch=getc(pin2)) !=EOF ) putc(ch,puit); 13. }
18
Programma-argumenten 1. FILE *openen(pargv, s) char *pargv, *s ; 2. { FILE *p; 3. if (( p=fopen(pargv,s)) == NULL) 4. { printf(“er is een probleem met file 5. %s\n”, pargv); exit(1); 6. } 7. else return (p) 8. }
19
Programma-argumenten argc = argument count argv = argument vector op de command-line staat: kopieer in1 in2 uit De files in1 en in2 worden achter elkaar naar de file uit geschreven.
20
Programma-argumenten Na het intypen geldt: argc=4 argv[0] = “kopieer” argv[1] = “in1” argv[2] = “in2” argv[3] = “uit” Als er geen 3 argumenten zijn of de files niet bestaan wordt een foutmelding gegeven
21
Huiswerk les4 Maak de opgaven 10.1-10.2 uit modulewijzer Maak de opgaven 11.1-11.2 uit modulewijzer Maak de opgaven 12.1-12.2 uit modulewijzer Bekijk vast de systemcalls van les 6
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.