Saltar a contenido

Introducci贸n I/O b谩sica (teclado/pantalla)

Ejemplo con printf

Claves del ejercicio
  • 脕mbito (scope) de una variable
  • Declaraci贸n (ojo, distinto de definici贸n) de variables y funciones
  • Definici贸n de funciones. C贸digo
  • Funci贸n main. Punto de entrada del programa
  • Uso de printf/fprintf
Llamadas al sistema

Enlaces:

C贸digo fuente del ejercicio

ejPrintf.c
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
 * main.c
 *
 *  Created on: 21/09/2015
 *      Author: santiago
 */

#define OK 0

#include <stdio.h>
#include <stdlib.h>

int y; /* Global. Conocida tanto por main() como por MiFuncion() */

void MiFuncion (void);

/*
 * Funci贸n sin argumentos ni valor de retorno
 */
void MiFuncion (void)
{
    int x; /* Local a MiFuncion() */
    x = 3;

    /* Visualiza x=3, y=100 */
    printf ("\n\tMiFuncion():\tx=%d, y=%d\n", x, y);
    printf ("\tMiFuncion():\tAddr x = %p, Addr y = %p\n", &x, &y);
}
// Qu茅 valores visualizan los printf ??
// man 3 printf !!!

int main(void) {
    int x; /* Esta x es local a main () */

    y = 100;    /* definici贸n de variable (pre)declarada globalmente */
    x = 1;

    printf ("main():\tAddr x = %p, Addr y = %p\n", &x, &y);
    /* Visualiza x=1, y=100 */
    printf ("main():\tx=%d, y=%d\n", x, y);
    printf ("\n--------------------\n");

    { /* Comienza bloque */
        int x; /* Esta x es local al bloque */
        x = 2;
        /* Visualiza x=2, y=100 */
        printf ("main():\tx=%d, y=%d\n", x, y);
        /* Visualiza x=3, y=100 */
        MiFuncion ();
        /* Visualiza x=2, y=100 */
        printf ("\nmain():\tx=%d, y=%d\n", x, y);
    } /* Fin del bloque */

    printf ("--------------------\n");

    /* Visualiza x=1, y=100 */
    printf ("\nmain():\tx=%d, y=%d\n", x, y);

    /* OJO con el operador de asignaci贸n */
    int z = 0;

    // OJO al aviso de Warning
    if (x = 100)    // No deber铆a cumplirse, x es 1
        printf ("\nmain():\tz=%d\n", z);

    printf ("\n--------------------\n");
    // Tabla ASCII http://ascii.cl/es/
    x = 65;
    printf ("\nmain():\t(int) x=%d, (unsigned char) x=%c\n", x, x);
    // Casting, conversi贸n de tipos
    x = (unsigned int) 'B';
    printf ("\nmain():\t(int) x=%d, (unsigned char) x=%c\n", x, x);

    exit(OK);
}

Especificadores de formato

Format Specifier Description
%c For character type.
%d For signed integer type.
%e or %E For scientific notation of floats.
%f For float type.
%g or %G For float type with the current precision.
%i signed integer
%ld or %li Long
%lf Double
%Lf Long double
%lu Unsigned int or unsigned long
%lli or %lld Long long
%llu Unsigned long long
%o Octal representation
%p Pointer
%s String
%u Unsigned int
%x or %X Hexadecimal representation
%n Prints nothing
%% Prints % character

Comandos relacionados

Uso del Manual

# Manual printf
man 3 printf

Compilaci贸n en una 煤nica orden gcc

# Compilar ejPrintf.c
gcc -Wall -Wextra -ansi -pedantic -Werror -g ejPrintf.c -o bin/ejPrintf

Laboratorio

Primer Lab


Tema avanzado: Argumentos de programa

馃憠 Paso de par谩metros a los programas
Ejercicio:
Modificar el c贸digo de ejPrintf.c para imprimir en pantalla los argumentos suministrados en la l铆nea de orden

/*
 * Cabecera de main para procesar los argumentos en la l铆nea de orden
 */
int main(int argc, char * argv[], char **env_var_ptr)