int printf(const char *format, argumentumlista); Visszatérési érték: kiírt karakterek száma konverziós argumentum nyomtatási karakter típusa kép c int unsigned char tíőusra konvertált karakter d, i int előjeles decimális egész u unsigned int előjel nélküli decimális egész f double előjeles tizedestört e, E double előjeles tizedestört normálalakban g, G double csak akkor normalizál, ha amúgy nem fér ki rendesen o unsigned int előjel nélküli oktális egész 0 előtag nélkül x, X unsigned int hecadecimális egész 0x előtag nélkül p void* mutató értéke n int* idáig kiírt karakterek számát adja vissza az argumentumban s char* karaktersorozat 0 végjelig % kiírja a % karaktert formátum: [%][jelző][minimális mezőszélesség][pontosság][méretmódosító][konverziós karakter] jelző: előjel megjelenítését, a mező ki nem használt részét feltöltő karaktereket, hexadecimális és oktális karakterek megjelenítését szabályozhatjuk vele alapértelmezés: jobbra igazítás, balról szóközök töltik ki a nem használt területet értékei: - (mínusz jel) -> balra igazít + -> előjel (+ vagy -) mindig megjelenik számoknál szóköz -> előjel helyén mínusz jel vagy szóköz 0 -> balról vezető 0-kal tölti ki a területet # -> %#x -> hexadecimális előtt 0x előtag %#o -> oktális előtt 0 előtag minimális mezőszélesság: decimális egész, megadja, hogy legalább hány karakter széles mezőben jelenjen meg az output. Ha ennél hosszabb, akkor automatikusan nagyobb szélességben jelenik meg. Ha *-ot dunk meg, akkor az argumentumlista köv. eleme adja meg a min. mezőszélességet. pontosság: megadás - .n, ahol n decimális egész. Értelmezése típusonként elérő. egész -> kiírandó jegyek minimális száma e, E, f -> tizedes jegyek száma g, G -> értékes jegyek száma sztring -> kiírandó karakterek maximális száma alapértelmezés: 6, de ekkor a sztringeket végig kiírja * szerepe ugyanaz mint az előbb méretmódodító előtag: H -> a, d, i, o, u, x, X konverziós karakterrel együtt a short int típust jelenti l -> a, d, i, o, u, x, X -> long int e, E, f, g, G -> double L -> e, E, f, g, G -> long double d, i, o, u, x, X -> long int Példák ============================================================= == BEGIN io.c =============================================== #include int main() { char *s = "alma"; double d = 1.32134e-5; printf("|%s|\n", s); printf("|%20s|\n", s); printf("|%-20s|\n", s); printf("|%.3s|\n", s); printf("%lf\n", d); printf("%le\n", d); printf("%lg\n", d); printf("%lg\n", d*100); printf("%.15lf\n", d); printf("%+.15lf\n", d); printf("%s\n", "alapertelmezesben a sztringeket vegig kiirja"); return 0; } == END io.c ================================================= ============================================================= A kimenet ============================================================= |alma| | alma| |alma | |alm| 0.000013 1.321340e-05 1.32134e-05 0.00132134 0.000013213400000 +0.000013213400000 alapertelmezesben a sztringeket vegig kiirja ============================================================= int scanf( const char *format, argumentumlista ); visszatérési érték: sikeresen beolvasott változók száma akkor tér vissza, ha: -formátumsztring által meghatározott számú adatot beolvasott -hibát észlel, azaz az adatbevitel nem felel meg a formátumsztring előírásainak formátum: [%][*][mezőszélesség][méretmódosító előtag][konverziós karakter] * -> a beolvasott adatot eldobja (nem próbálja meg valamely változóban tárolni) konverziós karakter bevitt adat d decimális egész i egész szám, akár oktális(0) vagy hexadecimális formában(0x vagy 0X) o oktális egész 0 előtag nélkül u előjel nélküli decimális egész x hexadecimális egész előtaggal vagy anélkül c karakter s sztring f, e, g valós érték, amely opcionálisan tartalmazhat előjelet és exponenst is p pointer n idáig beolvasott karakterek számát adja vissza az argumentumban Szűrés: scanf("%[abc]", str) - az inputból csak az a,b,c, karaktereket olvassa be str-be [^abc] - mindent, kivéve az a,b,c karaktereket [a-z] - kisbetűket [a-z0-9] - kisbetűket és számokat Egyéb i/o függvények int getchar( void ) - 1 db karakter beolvasása int putchar( int ch ) - 1 db karakter kiírása char *gets( char *str ) - sztring beolvasása újsor karakterig, int puts( char *str ) - sztring kiírása gets-et soha ne használd! Helyette: char *fgets( char *str, int num, FILE *stream ) - ugyanúgy működik, de max num-1 karaktert olvas be Használat stdio esetén: char s[256]; fgets(s, 256, stdio); Példa: olvassuk be egy számot, a sor további részét ugorjuk át, majd a következő sorból egy másikat =========================================================== == BEGIN sor.c ============================================ #include int main() { int szam1, szam2; scanf("%d%*[^\n]", &szam1); getchar(); scanf("%d", &szam2); printf("Elso:\t%d\n", szam1); printf("Masodik:\t%d\n", szam2); return 0; } == END sor.c ============================================== =========================================================== PÉLDÁK F: Írj egy programot, ami beolvas egy előjeltelen short int értéket, és nyolcas számrendszerbe átváltva írja ki. ============================================================================== == BEGIN nyolcas.c =========================================================== #include int main() { unsigned short int v; scanf("%Hu", &v); printf("%Ho\n", v); return 0; } == END nyolcas.c ============================================================= ============================================================================== F: Írj egy programot, ami beolvas egy hexadecimális egész számot, majd 15 karakter szélességben kiírja a decimális értékét, mindenképpen előjellel és vezető nullákkal. ============================================================================== == BEGIN hexa.c ============================================================== #include int main() { unsigned int v; scanf("%x", &v); printf("%+015u\n", v); return 0; } == END hexa.c ================================================================ ============================================================================== F: Olvass be egy double és egy egész értéket, majd a valós értéket írasd ki az egészben megadott pontossággal. ============================================================================== == BEGIN pontossag.c ========================================================= #include int main() { double ertek; int pontossag; scanf("%lf %d", &ertek, &pontossag); printf("%1.*lf\n", pontossag, ertek); return 0; } == END pontossag.c =========================================================== ============================================================================== HF: Mi a különbség a %g, %f, %e kiíratási formák között? F: Olvass be egy csupa kisbetűből álló, legfeljebb 20 karakteres sztringet, majd írasd ki 10 karakteren jobbra igazítva az első legfeljebb 8 karakterét. A bemeneten a kisbetűket közvetlenül bármi követheti. ============================================================================== == BEGIN sztringek.c ========================================================= #include int main() { char str[21]; scanf("%20[a-z]", str); printf("%10.8s\n", str); return 0; } == END sztringek.c =========================================================== ============================================================================== F: Egy sor kiíratási formátuma: "nev: %s; pont: %d;". Olvasd be a kiírt számot úgy, ha tudod, hogy a kiírt sztring nem tartalmazhat pontosvesszőt. Ellenőrízd le, hogy az input sor valóban helyes-e. ============================================================================== == BEGIN ertek.c ============================================================= #include int main() { int val, ret; ret=scanf("nev: %*[^;]; pont: %d;", &val); if(ret==1) { printf("A szam: %d\n", val); } else { printf("Helytelen formatum\n"); } return 0; } == END ertek.c =============================================================== ============================================================================== F: Írasd ki a fájlvége jelig (^D) tartó bemenetet úgy, hogy a számjegyeket törlöd belőle. A végén írd ki, hogy hány számjegyet töröltél. ============================================================================== == BEGIN ertek.c ============================================================= #include int main() { int c, d=0; while((c=getchar())!=EOF) { if('0'<=c && c<='9') { d++; } else { putchar(c); } } printf("\n--\n%d torolve\n", d); return 0; } == END ertek.c =============================================================== ============================================================================== HF: Olvass be egy teljes sort egy sztringbe, majd írasd ki. Mi a különbség a gets, puts illetve fgets(stdin, ...), fputs(stdout, ...) használata között.