elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda con un micro codigo....
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: duda con un micro codigo....  (Leído 6,134 veces)
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
duda con un micro codigo....
« en: 25 Junio 2013, 01:12 am »

tengo

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. char buff[1];
  4. void entrada(){
  5.     printf("texto para entrada: ");
  6.     scanf("%s",buff);
  7. }
  8. void salida(){
  9.     printf("fin");
  10. }
  11. int main (){
  12.    entrada();
  13.    salida();
  14.    system("cmd.exe /c pause");
  15.    return 0;
  16. }

lo compilo en netbeans con cygwin (por eso el cmd.exd en system)

lo lógico es que la salida sea
Código:
texto para entrada: a
fin
Presione una tecla para continuar . . .
(la "a" es el valor que ingreso)

pero la salida real es

Código:
texto para entrada: a
Presione una tecla para continuar . . .

fin

mi duda es:
¿por qué muestra el "fin" despues del system si se llama antes?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: duda con un micro codigo....
« Respuesta #1 en: 25 Junio 2013, 01:18 am »

Usa fflush(stdout) así:

Código
  1.  
  2. void salida(){
  3.     printf("fin");
  4.     fflush(stdout);
  5. }
  6.  
  7.  

Si no ocupas parametros usa puts();

Código
  1.  
  2. void salida(){
  3.     puts("fin");
  4. }
  5.  
  6.  

o termina la cadena con un salto de linea

Código
  1.  
  2. void salida(){
  3.     printf("fin\n");
  4. }
  5.  
  6.  

Dulces Lunas!¡.


« Última modificación: 25 Junio 2013, 01:20 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: duda con un micro codigo....
« Respuesta #2 en: 25 Junio 2013, 01:25 am »

Y ese código no te da errores...?

Prueba con este:


Código
  1. #include <stdio.h>
  2.  
  3. void entrada();
  4. void salida();
  5.  
  6. int main ()
  7. {
  8.    entrada();
  9.  
  10.    salida();
  11.  
  12.    fflush(stdin);
  13.    getchar();
  14. }
  15.  
  16. void entrada()
  17. {
  18.    char buff[1];
  19.  
  20.    printf("texto para entrada: ");
  21.    scanf("%s",buff);
  22.  
  23. }
  24. void salida()
  25. {
  26.    printf("\nfin");
  27. }
  28.  

Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: duda con un micro codigo....
« Respuesta #3 en: 25 Junio 2013, 01:34 am »

no, no me entendieron...

lo que estoy no es pidiendo ayuda para hacer el codigo... es solo ese codigo... quiero responder una simple y única pregunta...

¿por qué con el código declarado por mi previamente me imprime el system antes que la salida?

y bueno, agregaré otra pregunta...
¿si uds corren ese código, les pasa lo mismo?


(por cierto, tiene un error el buff es [2] no [1] por la condicion "s" del scanf)
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: duda con un micro codigo....
« Respuesta #4 en: 25 Junio 2013, 01:43 am »

no, no me entendieron...

lo que estoy no es pidiendo ayuda para hacer el código... es solo ese código... quiero responder una simple y única pregunta...

¿por qué con el código declarado por mi previamente me imprime el system antes que la salida?

y bueno, agregaré otra pregunta...
¿si uds corren ese código, les pasa lo mismo?


(por cierto, tiene un error el buff es [2] no [1] por la condicion "s" del scanf)

Si corro tu código me saltan algunos errores

1.- En tu código no declaras las dos funciones, por lo que no las reconoce
2.- La función "printf" pertenece a <stdio.h>, por lo que <iostream> y <stdlib.h> no hacen falta
3.- Estas declarando una variable global (no es error, pero deberías tener cuidado con las variables globales)

Tu código a mi no me compila, he probado con el mio y funciona perfectamente, la salida que me da es esta:

Citar
texto para entrada: a
fin

Espero que te ayude

Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: duda con un micro codigo....
« Respuesta #5 en: 25 Junio 2013, 01:52 am »

MeCraniDOS: que compilador usas?

Citar
1.- En tu código no declaras las dos funciones, por lo que no las reconoce
2.- La función "printf" pertenece a <stdio.h>, por lo que <iostream> y <stdlib.h> no hacen falta
3.- Estas declarando una variable global (no es error, pero deberías tener cuidado con las variables globales)

1- no las declaro porque las metí antes del main
2- las otras 2 librerias es porque el codigo es más largo, pero vi eso y recorté el código para ver eso y no saqué las otras 2 librerias
por cierto... a mi me corren con <iostream> no con <stdlib.h> si quito stdlib da igual... si quito iostream ni si quierta compila XD

3- esa variable es un simple buffer que metí a los golpes por meter XD


está bien... aqui el codigo arreglado...

Código
  1. #include <iostream>
  2. void entrada();
  3. void salida();
  4. void entrada(){
  5.     char buff[2];
  6.     printf("letra para entrada: ");
  7.     scanf("%s",buff);
  8. }
  9. void salida(){
  10.     printf("fin");
  11. }
  12. int main (){
  13.    entrada();
  14.    salida();
  15.    system("cmd.exe /c pause");
  16.    return 0;
  17. }

la salida sigue siendo
Código:
letra para entrada: a
Presione una tecla para continuar . . .

fin
RUN SUCCESSFUL (total time: 3s)
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: duda con un micro codigo....
« Respuesta #6 en: 25 Junio 2013, 02:01 am »

no, no me entendieron...

lo que estoy no es pidiendo ayuda para hacer el codigo... es solo ese codigo... quiero responder una simple y única pregunta...

¿por qué con el código declarado por mi previamente me imprime el system antes que la salida?

y bueno, agregaré otra pregunta...
¿si uds corren ese código, les pasa lo mismo?


(por cierto, tiene un error el buff es [2] no [1] por la condicion "s" del scanf)

Cuando tu quieres mostrar una cadena o caracter "X" este se plasma en un archivo llamado stdout (funciones como puts() y printf() usan este archivo de manera interna) y solo se muestra dicho texto en la terminal en un momento dado uno de esos momentos son:

Cuando se tiene un salto de linea
Cuando se usa fflush(stdout); fflush(stdout) obliga a mostrar el contenido de stdout en la terminal y por ende vaciar stdout.
Algún otro que fuerce su visualización.

 *  Cuando se visualiza el contenido se "limpia".

Un caso similar en con el archivo stdin que sirve para almacenar lo que se a introducido a la computadora (teclado) y permite obtener y vaciar en cada consulta, gracias a ello existe getchar().

Existe un tercer archivo llamado stderr() que es similar a stdout solo que es orientado a mostrar cadenas errores que a nosotros puede servirnos en la depuración de un programa.

Estos 3 archivos son de tipo FILE*.

Dulces Lunas!¡.
« Última modificación: 25 Junio 2013, 02:08 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: duda con un micro codigo....
« Respuesta #7 en: 25 Junio 2013, 02:03 am »

BlackZeroX (Astaroth)

respuesta perfecta con todo lo que necesitaba saber! eso ayuda bastante! de todas formas no espero sino usar cout y cin pero el conocimiento no sobra
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: duda con un micro codigo....
« Respuesta #8 en: 25 Junio 2013, 02:06 am »

Agrego.

<iostream> es de C++ si usas este mejor usa cout, cin y cerr para tus propositos.

http://www.cplusplus.com/reference/istream/iostream/?kw=iostream
http://www.cplusplus.com/reference/istream/

Con cout, cin y cerr para algo similar cout tiene su miembro flush().

Existe uno cuarto llamado clog.

Todo lo que era de ostream tiene su miembro fflush (cout, cerr y clog)


Fuente: http://www.cplusplus.com/reference/ios/

Dulces Lunas!¡.
« Última modificación: 25 Junio 2013, 02:13 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda con un micro codigo....
« Respuesta #9 en: 25 Junio 2013, 02:18 am »

Una ventaja de utilizar cout y cin es la sincronización de estos: si se utiliza cout para enviar un texto a la salida estándar y a continuación se utiliza cin el bufer del primero se vacía automáticamente.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con chipset Intel 865 GV y micro con bus a 800.
Electrónica
caballero_verde 3 3,520 Último mensaje 25 Febrero 2008, 08:48 am
por Randomize
Duda sobre circuitos electronicos [Procesador micro-controlador Basic 24X]
Electrónica
Debci 5 7,547 Último mensaje 23 Abril 2010, 15:05 pm
por Meta
Tengo una duda , con un micro..
Hardware
Jenag 5 2,635 Último mensaje 4 Abril 2012, 02:24 am
por Aprendiz-Oscuro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines