Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Se cierra la aplicacion

Estas en el tema de Se cierra la aplicacion en el foro de C/C++ en Foros del Web. Bueno, realmente soy muy nuevo (demasiado) en esto de C digamos tengo nociones de programacion (PHP,Javascript, etc) pero solo es para web, ahora comienzo por ...
  #1 (permalink)  
Antiguo 04/10/2006, 00:27
 
Fecha de Ingreso: enero-2004
Mensajes: 431
Antigüedad: 20 años, 3 meses
Puntos: 6
Pregunta Se cierra la aplicacion

Bueno, realmente soy muy nuevo (demasiado) en esto de C

digamos tengo nociones de programacion (PHP,Javascript, etc) pero solo es para web, ahora comienzo por el lenguaje que considero primordial que es C,
pues tengo el Dev C++ he escuchado que es muy bueno, pero tengo un problema, al terminar cualquier proyecto, lo compilo y creo el .exe pero a la hora de arrancarlo este solo se abre y se cierra, cuando el codigo esta bien!!

ejemplo:
Código:
#include <stdio.h>
int main () {
int nombre;
printf("%s","Escriba su nombre\n");
scanf("%s",&nombre);
printf("%s","Su nombre es:\n");
printf("%s",nombre);
return 0;
}

Este es un ejemplo, al iniciar la aplicacion ya compilada solo se ejecuta hasta la funcion scanf cuando me pide mi nombre, lo inserto pero al presionar enter se cierra la aplicacion, y esto pasa con todo solo se ejecutan 1 o 2 lineas del codigo y se cierra, por que sera?

Trabajo con Windows XP SP2

Agradeceria cualquier orientacion
  #2 (permalink)  
Antiguo 04/10/2006, 00:38
(Desactivado)
 
Fecha de Ingreso: febrero-2005
Ubicación: Azcapotzalco
Mensajes: 299
Antigüedad: 19 años, 2 meses
Puntos: 2
Código:
#include <stdio.h>

int main () {
char nombre[20];
printf("%s","Escriba su nombre\n");
scanf("%s",&nombre);
printf("%s","Su nombre es:\n");
printf("%s",&nombre);
getch();
return 0;
}
en el tercer printf te falta el &, quizas tambien haga falta un getch para que el programa espere hasta que presiones una tecla para continuar

otra es cosa es que declaras nombre como entero y lo imprimes como cadena, esa conversion cast no se si sea correcta, si alguien a mi tambien me aclara eso, yo tampoco soy experto en C

yo conocia otras como de char a int, de int a float o de float a int
  #3 (permalink)  
Antiguo 04/10/2006, 03:32
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
key0...
es verdad uno de tus errores, es declara la variable nombre como un entero, esto es incorrecto, ya que printf usa un parametro char*, es decir un array de caracteres o un pntero a char.

lo correcto seria usar char nombre[20];

y no, no es necesrio usar & ni con printf, ni con scanf, ya que en este caso nombre en realidad es el nombre que identifica una seccion de memoria.

y para detener tu aplicacion antes de salir, usa getchar(); ó system("pause");
este ultimo solo funciona en windows.

el problema con getchar(), es que si elbuffer de lectura no esta vacio, no detendra la aplicacion.

bien podrias hacer:

fflush(stdin);
getchar();
para asegurarte de que se detendra.

lo que se hace es leer de la entrada estandar, esto permite que la aplicacion se detenga a esperar un caracter de entrada.

el system, hace una llamada al SO:

xp64, tal vez has visto que a prinf o scanf se le pasen parametros diferentes a char[], esto es posible por que estas funciones usan parametros variables, indefinidos o como quieras llamarles,

el prototip es este:

printf(char* , ...);

el puntero a char es para una cadena que sirve para indicar el formato y cantidad de tipos que se le pasen a la funcion, los 3 puntos indican parametros variables o indefinidos.

para escribir tanto una cadena como un entero hacemos:

char nombre[] = "Un nombre";
int edad = 20;

printf("%s %i \n", nombre, edad);

como vez printf imprimira las 2 variables a la vez, pero tenemos que indicarle el respecitvo formato de las variables a escribir. %s para string(cadena), %i para integer(entero), hay otros indicadores de formato.

con scanf es similar solo que cuando lees una variable diferente a una cadena tienes que usar el operador &, para pasar la memoria de la variable y esta sufra cambios, de lo contrario se parasara una copia.
Saludos.
  #4 (permalink)  
Antiguo 04/10/2006, 03:36
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
agregar que cuando solo quieras imprimir una cadena no es necesario usar una cadena de formato:

printf("%s\n", "Una cadena"); //no es necesario.

printf("Una cadena\n"); //con esto basta.

o

puts("Una cadena");
  #5 (permalink)  
Antiguo 04/10/2006, 06:39
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Aparte de la correción de lo de "char nombre", te recomiendo que no pongas nada al final del programa.

Abre una consola (en Windows XP: Inicio -> Ejecutar -> "cmd.exe"), muévete hasta donde tienes el programa y lo ejecutas allí. Verás que funciona perfectamente, y no se te cierra.

Ese debería ser el procedimiento que deberías seguir.
  #6 (permalink)  
Antiguo 04/10/2006, 17:46
 
Fecha de Ingreso: enero-2004
Mensajes: 431
Antigüedad: 20 años, 3 meses
Puntos: 6
ok muchas gracias, en el codigo no hay error esta tal como me lo dijeron solo que lo escribi aqui para dar un ejemplo y la verdad es eque como soy nuevo se me fueron unos detalles pero en el codigo que ejecuto esta bien, probare usandolo desde cmd
__________________
El que teme preguntar, se averguenza de aprender.
  #7 (permalink)  
Antiguo 05/10/2006, 06:56
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por kez0 Ver Mensaje
ok muchas gracias, en el codigo no hay error esta tal como me lo dijeron solo que lo escribi aqui para dar un ejemplo y la verdad es eque como soy nuevo se me fueron unos detalles pero en el codigo que ejecuto esta bien, probare usandolo desde cmd
Bien, haces lo correcto.

Pero es incorrecto el código, te lo repito como otros lo han hecho.

No puedes pretender meter en una variable numérica una cadena de caracteres.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:57.