• Lunes 20 de Mayo de 2024, 00:00

Autor Tema:  Duda Con Este Codigo  (Leído 1487 veces)

Perrero

  • Miembro MUY activo
  • ***
  • Mensajes: 209
    • Ver Perfil
Duda Con Este Codigo
« en: Domingo 4 de Junio de 2006, 19:04 »
0
Tengo un codigo el cual te pide ingresa un numero y luego un mensaje, de esta manera

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. typedef int integer;
  6. typedef char string[255];
  7.  
  8. int main()
  9. {
  10.     integer num;
  11.     string cadena;    
  12.     printf("Introduce un numero: ");
  13.     scanf("%i",&num);
  14.     printf("Introduce un mensaje: ");
  15.     fflush(stdout);
  16.     gets(cadena);      
  17.     printf("El numero introducido es %i",num);
  18.     printf("\nEl mensaje introducido fue %s\n\n",cadena);
  19.     system("pause");
  20.     return 0;
  21. }
  22.  
  23.  

primero e pide que meta un numero, cuando lo introduzco y le doy enter no me deja meter el mensaje xq el programa se termina y sale como mensaje "El numero introducido es...".

Pero si hago que primero me deje meter el mensaje y despues el numero, el programa va bien. A que se debe esto?... :hola:

robbie110487

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Duda Con Este Codigo
« Respuesta #1 en: Domingo 4 de Junio de 2006, 21:07 »
0
Hola, ese codigo esta bien, el error esta cuando limpias el buffer de entrada, la sentencia correcta es
Código: Text
  1. fflush(stdin);
  2.  

el codigo deberia quedar asi:

Código: Text
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. typedef int integer;
  5. typedef char string[255];
  6.  
  7. int main()
  8. {
  9.    integer num;
  10.    string cadena;
  11.    printf("Introduce un numero: ");
  12.    scanf("%i",&num);
  13.    printf("Introduce un mensaje: ");
  14.    fflush(stdin);
  15.    gets(cadena);
  16.    printf("El numero introducido es %i",num);
  17.    printf("\nEl mensaje introducido fue %s\n\n",cadena);
  18.    system("pause");
  19.    return 0;
  20. }
  21.  

Compilalo asi y veras que va de maravilla...

Un saludo  :hola:

Perrero

  • Miembro MUY activo
  • ***
  • Mensajes: 209
    • Ver Perfil
Re: Duda Con Este Codigo
« Respuesta #2 en: Domingo 4 de Junio de 2006, 23:21 »
0
pero xq el gets() no funciona de forma similar al scanf, xq tengo q limpiar el buffer cuando uso gets()?

robbie110487

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Duda Con Este Codigo
« Respuesta #3 en: Lunes 5 de Junio de 2006, 01:03 »
0
La verdad no se, las unica diferencia que yo conozco entre scanf() y gets(), es que scanf() es entrada con formato:

Código: Text
  1. char *gets(char *cadena);
  2.  

Citar
Esta función lee caracteres desde el stream apuntado por stream stdin, en el array apuntado por cadena, hasta que se encuentre un final de fichero (EOF) o un carácter de línea nueva es leído. Cualquier carácter de línea nueva es descartado, y un carácter nulo es escrito inmediatamente después del último carácter leído en el array.



Código: Text
  1. int scanf(const char *formato, ...);
  2.  

Código: Text
  1. Esta función es equivalente a fscanf con el argumento stdin interpuesto antes de los argumentos a scanf.
  2.  

Citar
fscanf
Esta función recibe datos del stream apuntado por stream, bajo el control de la cadena apuntada por formato que especifica las secuencias de entrada permitadas y cómo han de ser convertidas para la asignación. Si hay argumentos insuficientes para el formato, el comportamiento no está definido. Si el formato termina mientras quedan argumentos, los argumentos restantes son evaluados (como siempre) pero ignorados. La función retorna control cuando el final de la cadena de formato es encontrado.

Fuente http://c.conclase.com

Tmb see que scanf solo lee una cadena hasta que encuentra un espacio a diferencia de gets()...
 :comp:

Un saludo  :hola:

x.cyclop

  • Miembro de PLATA
  • *****
  • Mensajes: 1039
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda Con Este Codigo
« Respuesta #4 en: Lunes 5 de Junio de 2006, 04:34 »
0
¿Cuál es la diferencia entre stdin y stdout del fflush()? :blink:

- Great works aren't produced on the first try. [Ernest Hemingway]
- Be ambitious, yet realistic in your dreams. Do something that makes a positive impact. Don’t let the nay-sayers get you down. [Bjarne Stroustrup]

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Duda Con Este Codigo
« Respuesta #5 en: Lunes 5 de Junio de 2006, 05:45 »
0
stdin apunta a la entrada (lo que se lee, introducido por el usuario), stdout a la salida (lo que muestras por pantalla).

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip