Autor
|
Tema: duda con un micro codigo.... (Leído 6,134 veces)
|
engel lex
|
tengo #include <iostream> #include <stdlib.h> char buff[1]; void entrada(){ printf("texto para entrada: "); scanf("%s",buff); } void salida(){ printf("fin"); } int main (){ entrada(); salida(); system("cmd.exe /c pause"); return 0; }
lo compilo en netbeans con cygwin (por eso el cmd.exd en system) lo lógico es que la salida sea texto para entrada: a fin Presione una tecla para continuar . . .
(la "a" es el valor que ingreso) pero la salida real es 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
Mensajes: 3.158
I'Love...!¡.
|
Usa fflush(stdout) así: void salida(){ }
Si no ocupas parametros usa puts(); void salida(){ }
o termina la cadena con un salto de linea void salida(){ }
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
Mensajes: 337
Sr. Glass
|
Y ese código no te da errores...?
Prueba con este:#include <stdio.h> void entrada(); void salida(); int main () { entrada(); salida(); fflush(stdin); getchar(); } void entrada() { char buff[1]; printf("texto para entrada: "); scanf("%s",buff); } void salida() { printf("\nfin"); }
Saludos
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
engel lex
|
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
Mensajes: 337
Sr. Glass
|
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: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
|
MeCraniDOS: que compilador usas? 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... #include <iostream> void entrada(); void salida(); void entrada(){ char buff[2]; printf("letra para entrada: "); scanf("%s",buff); } void salida(){ printf("fin"); } int main (){ entrada(); salida(); system("cmd.exe /c pause"); return 0; }
la salida sigue siendo 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
Mensajes: 3.158
I'Love...!¡.
|
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
|
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.
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
|
|
|
|
|