Moät soá kieán thöùc cô sôû veà laäp trình baèng ngoân ngöõ C

Phaâàn tröôùc | Muïc luïc | Phaâàn sau

V. Ñoïc vaø vieát qua caùc giao tieáp nhaäp xuaát (I/O) chuaån

Noäi dung:

Vôùi phaàn naøy ta tìm hieåu kyõ hôn vôùi leänh printf() cuõng nhö caùc leänh nhaäp xuaát sau:

 

Caùc giao tieáp nhaäp xuaát chuaån (I/O)

Ngoân ngöõ C xöû lyù moät taäp tin nhö moät chuoãi byte (8 bits), goïi laø stream vaø coù theå thu nhaän hoaëc ghi laïi noù qua caùc giao tieáp xuaát nhaäp (I/O):

 

Noäi dung

Thieát bò giao tieáp

Stdin

Giao tieáp nhaäp chuaån

Baøn phím

Stdout

Giao tieáp xuaát chuaån

Maøn aûnh

Stderr

Giao tieáp loãi ñeå thoâng baùo loãi

Maøn aûnh

                                                                          

Ghi chuù

Ngoân ngöõ C thao taùc vôùi nhieàu leänh nhaäp xuaát (I/O) chöùa trong header stdio.h. Cho neân, luoân nhôù khai baùo #include stdio.h tröôùc khi söû duïng caùc leänh I/O. Ñoái vôùi C++, caùc leänh nhaäp xuaát chöùa trong iostream.h.

Giao tieáp nhaäp töø ngöôøi söû duïng (thöôøng laø thoâng qua baøn phím)

Haøm getc()

Haøm getc() ñoïc 1 kyù töï töø moät file stream vaø traû laïi giaù trò soá nguyeân öùng vôùi kyù töï ñoù.

#include <stdio.h>
int getc(FILE *stream);

Neáu keát thuùc teäp (end-of-file) hoaëc loãi xuaát hieän, haøm traû laïi giaù trò EOF.

Ví duï: Ñoïc kyù töï do ngöôøi söû duïng cho vaøo

1:  /*Reading input by calling getc() */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     int ch;
7:
8:     printf("Please type in one character:\n");
9:     ch = getc( stdin );
10:    printf("The character you just entered is: %c\n", ch);
11:    return 0;
12: }
Keát quaû:
Please type in one character:
H
The character you just entered is: H

Haøm getchar()

Haøm getchar() töông ñöông vôùi getc(stdin).

#include <stdio.h>
int getchar(void);

Neáu keát thuùc teäp (end-of-file) hoaëc loãi xuaát hieän, haøm traû laïi giaù trò EOF.

Ví duï: Ñoïc kyù töï do ngöôøi söû duïng cho vaøo

1:  /*Reading input by calling getchar() */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     int ch1, ch2;
7:
8:     printf("Please type in two characters together:\n");
9:     ch1 = getc( stdin );
10:    ch2 = getchar( );
11:    printf("The first character you just entered is: %c\n", ch1);
12:    printf("The second character you just entered is: %c\n", ch2);
13:    return 0;
14: }
Keát quaû:
Please type in two characters together:
Hi
The first character you just entered is: H
The second character you just entered is: i

Giao tieáp xuaát ra maøn aûnh

Haøm putc()

Haøm putc() ghi 1 kyù töï vaøo moät file stream.

#include <stdio.h>
int putc(int c, FILE *stream);

Neáu ghi thaønh coâng, haøm traû laïi giaù trò kyù töï,; neáu khoâng traû laïi EOF.

Ví duï: Xuaát moät kyù töï leân maøn aûnh

1:  /*Outputting a character with putc() */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     int ch;
7:
8:     ch = 65;   /* the numeric value of A */
9:     printf("The character that has numeric value of 65 is:\n");
10:    putc(ch, stdout);
11:    return 0;
12: }
Keát quaû:
The character that has numeric value of 65 is:
A
C:\app>

Haøm putchar()

Haøm putchar() töông ñöông vôùi putc(stdout).

#include <stdio.h>
int putchar(int c);

Neáu ghi thaønh coâng, haøm traû laïi giaù trò kyù töï,; neáu khoâng traû laïi EOF.

Ví duï: Xuaát kyù töï leân maøn aûnh

1:  /* 05L04.c: Outputting characters with putchar() */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     putchar(65);
7:        putchar(10);
8:           putchar(66);
9:              putchar(10);
10:          putchar(67);
11:       putchar(10);
12:    return 0;
13: }
Keát quaû:
A
B
C

Haøm printf()

#include <stdio.h>
int printf(const char *format-string, ...);

VD:  printf("The sum of two integers %d + %d is: %d.\n",a,b,c);

Caùc ñaëc taû format duøng vôùi printf():

%c

Kyù töï

%d

Soá nguyeân

%i

Soá nguyeân (nhö %d).

%f

Soá thöïc daáu phaåy ñoäng

%e

Soá thöïc daïng a.aaae+bbb

%E

Soá thöïc daïng a.aaaE+bbb

%g

Duøng %f hoaëc %e, neáu caùi naøo ngaén hôn.

%G

Duøng %f hoaëc %E, neáu caùi naøo ngaén hôn.

%o

Soá octa khoâng daáu

%s

Chuoãi kyù töï

%u

Soá nguyeân khoâng daáu

%x

Soá hexa khoâng daáu (vôùi x thöôøng)

%X

Soá hexa khoâng daáu (vôùi X hoa)

%p

Hieån thò ñoái soá laø pointer

%%

Cho ra kyù töï (%).

Ñoåi thaønh soá Hexa

Ví duï:

1:  /*Converting to hex numbers */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     printf("Hex(uppercase)    Hex(lowercase)    Decimal\n");
7:     printf("%X                %x                %d\n", 0, 0, 0);
8:     printf("%X                %x                %d\n", 1, 1, 1);
9:     printf("%X                %x                %d\n", 2, 2, 2);
10:    printf("%X                %x                %d\n", 3, 3, 3);
11:    printf("%X                %x                %d\n", 4, 4, 4);
12:    printf("%X                %x                %d\n", 5, 5, 5);
13:    printf("%X                %x                %d\n", 6, 6, 6);
14:    printf("%X                %x                %d\n", 7, 7, 7);
15:    printf("%X                %x                %d\n", 8, 8, 8);
16:    printf("%X                %x                %d\n", 9, 9, 9);
17:    printf("%X                %x                %d\n", 10, 10, 10);
18:    printf("%X                %x                %d\n", 11, 11, 11);
19:    printf("%X                %x                %d\n", 12, 12, 12);
20:    printf("%X                %x                %d\n", 13, 13, 13);
21:    printf("%X                %x                %d\n", 14, 14, 14);
22:    printf("%X                %x                %d\n", 15, 15, 15);
23:    return 0;
24: }
Keát quaû:
Hex(uppercase)   Hex(lowercase)   Decimal
0                0                0
1                1                1
2                2                2
3                3                3
4                4                4
5                5                5
6                6                6
7                7                7
8                8                8
9                9                9
A                a                10
B                b                11
C                c                12
D                d                13
E                e                14
F                f                15

Format soá nguyeân xaùc ñònh soá chöõ soá:    % (-0n) d

1:  /*Specifying minimum field width */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     int num1, num2;
7:
8:     num1 = 12;
9:     num2 = 12345;
10:    printf("%d\n", num1);
11:    printf("%d\n", num2);
12:    printf("%5d\n", num1);
13:    printf("%05d\n", num1);
14:    printf("%2d\n", num2);
15:    return 0;
16: }
Keát quaû:
12
12345
   12
00012
12345

Saép xeáp soá nguyeân thaúng haøng beân phaûi hoaëc traùi

1:  /*Aligning output */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     int num1, num2, num3, num4, num5;
7:
8:     num1 = 1;
9:     num2 = 12;
10:    num3 = 123;
11:    num4 = 1234;
12:    num5 = 12345;
13:    printf("%8d  %-8d\n", num1, num1);
14:    printf("%8d  %-8d\n", num2, num2);
15:    printf("%8d  %-8d\n", num3, num3);
16:    printf("%8d  %-8d\n", num4, num4);
17:    printf("%8d  %-8d\n", num5, num5);
18:    return 0;
19: }
Keát quaû:
       1  1
      12  12
     123  123
    1234  1234
   12345  12345

Format bieåu dieãm ñoä chính xaùc:    %  (a.b) f  ,   %  (a.b) d

1:  /* Using precision specifiers */
2:  #include <stdio.h>
3:
4:  main()
5:  {
6:     int int_num;
7:     double flt_num;
8:
9:     int_num = 123;
10:    flt_num = 123.456789;
11:    printf("Default integer format:    %d\n", int_num);
12:    printf("With precision specifier:  %2.8d\n", int_num);
13:    printf("Default float format:      %f\n", flt_num);
14:    printf("With precision specifier:  %-10.2f\n", flt_num);
15:    return 0;
16: }
Keát quaû:
Default integer format:    123
With precision specifier:  00000123
Default float format:      123.456789
With precision specifier:  123.46

Baøi taäp

  1. Xuaát leân maøn aûnh kyù töï B, y vaø e.
  2. Hieån thò leân maøn aûnh 2 soá 123 vaø 123.456 vaø xeáp thaúng haøng veà phía traùi.
  3. Bieåu dieãn 3 soá 15, 150, and 1500 döôùi daïng hexa.
  4. Chöông trình sau coù loãi gì?
main()
{
   int ch;
   ch = getchar();
   putchar(ch);
   return 0;
}

Phaâàn tröôùc | Muïc luïc | Phaâàn sau