Diferencia entre revisiones de «Curso de Programación en C/Prog79»
Ir a la navegación
Ir a la búsqueda
(→Prog79) |
(Sin diferencias)
|
Revisión actual del 21:30 12 may 2012
Prog79
1 #include <stdio.h>
2
3 #define MSG "Debe tener muchos talentos. Me dicen algunos."
4 #define LIM 5
5 #define LINEATAMANO 81 // tamaño maximumo + 1
6
7 int main(void)
8 {
9 char nombre[LINEATAMANO],
10 talentos[LINEATAMANO];
11
12 const char m1[40] = "Limitarte a una sola línea.",
13 m2[] = "Si no puedes pensar en nada, falsificarlo.",
14 *m3 = "\nSuficiente acerca de mí - ¿cuál es tu nombre?",
15
16 *mital[LIM] = {
17 "Adición de números rápidamente",
18 "Multiplicación exactamente",
19 "Esconder datos",
20 "Siguiendo instrucciones con precisión",
21 "Comprensión del lenguaje C"
22 };
23 int i;
24
25 printf( "¡Hola! Soy clyde, la computadora."
26 " Tengo muchos talentos.\n" );
27 printf( "Déjeme decirle algunos de ellos.\n" );
28 puts( "¿Qué era ellos? Ah, sí, aquí está una lista parcial." );
29 for( i = 0; i < LIM; i++ )
30 puts( mital[i] );
31 puts( m3 );
32 gets( nombre );
33 printf( "Entonces, %s, %s\n", nombre, MSG );
34 printf( "%s\n%s\n", m1, m2 );
35 gets( talentos );
36 puts( "Vamos a ver si tengo esa lista:" );
37 puts( talentos );
38 printf( "Gracias por la información, %s.\n", nombre );
39
40 return 0;
41 }
Resultado
[rrc@Pridd CClase]$ gcc -Wall -O2 -o Prog79 Prog79.c /home/rrc/tmp/cc6XATeK.o: In function `main': Prog79.c:(.text+0x1a0): warning: the `gets' function is dangerous and should not be used. [rrc@Pridd CClase]$ ./Prog79 ¡Hola! Soy clyde, la computadora. Tengo muchos talentos. Déjeme decirle algunos de ellos. ¿Qué era ellos? Ah, sí, aquí está una lista parcial. Adición de números rápidamente Multiplicación exactamente Esconder datos Siguiendo instrucciones con precisión Comprensión del lenguaje C Suficiente acerca de mí - ¿cuál es tu nombre? Richard Entonces, Richard, Debe tener muchos talentos. Me dicen algunos. Limitarte a una sola línea. Si no puedes pensar en nada, falsificarlo. Yo puedo Ondular mi nariz Vamos a ver si tengo esa lista: Yo puedo Ondular mi nariz Gracias por la información, Richard.
=== Explicación === gets() es una función peligrosa porque gets() no tiene ninguna manera de saber cuánto puede escribir, y por ello, escribirá siempre en memoria, todos los caracteres que introduzcamos. De todas formas no debemos darlo todo por perdido, tenemos una excelente función, muy parecida fgets(), aunque tiene más parámetros: El primer parámetro de fgets() es dónde vamos a almacenar lo leído. El segundo parámetro es cuántos caracteres leeremos como máximo (incluyendo el terminador de cadena). Y si hemos definido un valor máximo para la cadena, podemos utilizar éste. El tercero es de dónde lo leemos, y si queremos hacerlo desde teclado, usaremos stdin