Page 374

B.3 Un problema serio: la lectura alterna de cadenas con gets y de escalares con scanf El usuario escribe entonces el texto que desea almacenar en b: u 0

a

n 1

o 2

3

\n

2

\n

d

o

4

5

6

7

8

9

4

5

6

7

8

9

s

\n

u n o \0

i 2 0

findelinea

1

2

3

\0

Ahora la lectura de b tiene ´exito. Tras ejecutar gets, ´este es el estado resultante: u 0

a

n 1

o 2

3

\n

2

\n

d

o

4

5

6

7

8

9

s

\n

u n o \0

i 2 0

findelinea

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

\0 0

b

1

d o s \0

¡Perfecto! Ya te dijimos que aprender C iba a suponer enfrentarse a algunas dificultades de car´acter t´ecnico. La u ´nica forma de superarlas es conocer bien qu´e ocurre en las entra˜ nas del programa. Pese a que esta soluci´ on funciona, facilita la comisi´on de errores. Hemos de recordar consumir el fin de l´ınea s´ olo en ciertos contexto. Esta otra soluci´on es m´as sistem´atica: leer siempre l´ınea a l´ınea con gets y, cuando hay de leerse un dato entero, flotante, etc., hacerlo con sscanf sobre la cadena le´ıda: lee alterno bien.c 1

lee alterno bien.c

#include <stdio.h>

2 3

#define TALLA 80

4 5 6 7 8 9

int main(void) { char a[TALLA+1], b[TALLA+1]; int i; char linea[TALLA+1]; // Cadena auxiliar. Su contenido no nos importa.

10

printf ("Cadena a: "); gets(a); printf ("Entero i: "); gets(linea) ; s scanf ( linea , "%d", &i); printf ("Cadena b: "); gets(b); printf ("La cadena a es %s, el entero i es %d y la cadena b es %s\n", a, i, b);

11 12 13 14 15

return 0;

16 17

}

368

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement