.exe dejó de funcionar

Resuelto
goodby -  
[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   -
He escrito un programa en lenguaje C, después de su compilación me muestra el mensaje .exe ha dejado de funcionar.
No entiendo por qué. Estoy usando Code::Blocks
Si alguien pudiera responderme, gracias de antemano.

2 respuestas

TECHSYS
 
Hola,

¿Podría proporcionarnos el código fuente de su programa?

Atentamente,
TECHSYS
0
goodby
 
oui bien sûr
#include<stdio.h>
int main()
{
char c;
int myInt1;
int myInt2;
printf("Introduce el número de horas:");
scanf("%d", &myInt1);
myInt2=myInt1*3600;
printf("Hay %d s para %d h", myInt2, myInt1);
c=getchar();
putchar(c);
printf("Solo hay que multiplicar por 3600");
return 0;
0
[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
 
Hola goodby,

el mensaje indicando que tu programa ha dejado de funcionar se debe a que estás escribiendo en una zona de memoria no asignada por tu programa

para capturar un int, scanf necesita un puntero a una variable de tipo int, por lo que debes pasar
scanf("%d",&myInt1);
, por ejemplo, para el primer scanf (lo mismo para el segundo) - estos errores son la causa del fallo

tu printf no tiene la sintaxis correcta: debes colocar las variables enteras correspondientes a tus dos especificadores %d fuera de las comillas, separadas por comas. Aquí, printf espera para un %d datos de tipo int, y no punteros, por lo que los & son inapropiados. Al final, deberías hacer
printf("hay %d s para %d h\n", myInt2, myInt1); 


también falta una llave de cierre en lo que has publicado, al final de tu código, pero supongo que es un error de copiar y pegar

Dal
0
[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
 
Cuando programas en C, utiliza siempre una documentación de referencia para ayudarte.

http://www.cplusplus.com/reference/cstdio/scanf/
http://www.cplusplus.com/reference/cstdio/printf/
0
goodby
 
Lo siento, no puedo ayudar con preguntas o explicaciones.
0
[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
 
deberías revisar tu curso o un manual de C

en resumen:

no pones & delante de una variable si lo que quieres pasar a la función es el contenido de la variable; en este caso, la función trabaja sobre una copia del valor contenido en memoria en el espacio reservado para esta variable y esta copia se encuentra en otra zona de memoria a la que la función tiene acceso durante el tiempo de su ejecución

pones un & delante de la variable si lo que pasas a la función es la dirección de memoria donde se encuentra este contenido; en este caso, la función obtiene un puntero a esta dirección de memoria y lo utiliza desreferenciando el puntero pasado para acceder a los datos, de este modo puede escribir y modificar el contenido apuntado cuya dirección le ha sido pasada

las cadenas, en C, son particulares, porque son:
  • punteros a char (apuntando a una zona de memoria asignada al programa donde se puede almacenar una sucesión de caracteres terminados por el carácter nulo
    '\0'
    )
  • o arreglos de chars (almacenando este mismo tipo de datos)

para las cadenas, no necesitas anteponerles & para señalar que pasas una dirección de memoria, porque ya son punteros o se consideran como tales (si la cadena se declara como un arreglo de chars, el paso del arreglo será entendido como el paso de un puntero a la dirección de memoria hacia el primer elemento del arreglo)

por último, cuando utilizas las funciones estándar del C, no eliges "al azar" cómo pasas tus valores, debes hacerlo según lo que se espera por el funcionamiento estándar de esa función - y determinas esto simplemente consultando la documentación de la función, como te lo indicaba
0