Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/09/2013, 08:40
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 9 meses
Puntos: 83
Respuesta: Programa en devc++ se detiene de pronto

Por favor indenta el codigo o usa las etiquetas de formateo que provee el foro que para eso estan, tu post será mas amigable y mas gente tendrá ganas de ayudarte :)

No he ejecutado pero te comento algo que he visto por encima: las variables (char)M y (char)F no estan incializadas en ningun sitio, por el echo de estar declaradas como globales se inicializan a 0 por defecto, es decir que M == F lo que equivale a que las lineas que tienes comentadas "if(sexo == M)" no tienen sentido.

Otra cosa, los textos se guardan por caracteres: un char por caracter, es decir que si quieres dar soporte para un texto de x caracteres tienes que declarar un array de chars de x elementos (incluido en \0 de final de cadena):

Código C:
Ver original
  1. char nombre_empresa[256];
  2. memset(nombre_empresa, 0, sizeof(nombre_empresa));
  3. printf("Ingrese nombre empresa: ");
  4. scanf("%s", nombre_empresa);

La otra opcion ya que estas en c++ es usar el objeto string que te permite olvidar de si el texto cabrá o no cabrá en la variable (para las string tendras que usar el manejador de stream de entrada estandar cin).

Junto con esto has de tener en cuenta otra cosa: cada tipo de dato puede requerir un tamaño especifico, y cada tipo de variable puede albergar un determinado tamaño de datos; p.ej. un char puede guardar enteros entre -127 y 127 lo que te permite un espacio mas que suficiente para entrar los datos de 'sexo': el caracter 'M' equivale al ascii 77 que está dentro del rango [-127, 127]:

Código C:
Ver original
  1. char sexo;
  2. printf("Especifique sexo (para femenino digite F o para masculino digite M):\t");
  3. scanf("%c", &sexo); //supongamos que entro M
  4. printf("%c", sexo); //aqui me muestra M
  5. printf("%d", sexo); //y aqui 77

Compara el modificador del scanf de este ejemplo con el que tienes en tu codigo (%s para cadena de caracteres, %c para caracter simple).


"..al compilar no me arroja errores, pero al ejecutar y llegar a la zona despues de "comentarios de la entrevista", se detiene de pronto..."

El compilador no te arroja error porque la sintaxis es correcta pero el uso no (es lo que te comenté al principio): cuando intentas acceder a una posicion de memoria no accesible por tu aplicacion (memoria no reservada) se produce lo que se conoce como violacion de segmento. En tu caso se provoca en la funcion scanf. La funcion scanf espera que le envies un buffer suficientemente grande para escanear el dato pedido, en el caso de un texto guardará en el bufer proporcionado todos los caracteres entrados por teclado hasta que encuentre un salto de linea (\n, la tecla enter con la que el usuario indica que terminó de escribir el campo), si declaras una variable char (4 bytes, 1 caracter) y envias ese char como bufer para la funcion scanf y el usuario entra 'hola', la 'h' se guarda correctamente, la 'o' se intentará guardar como siguiente elemento de un supuesto array pero que en realidad está fuera de la memoria accesible con lo que provocas la violacion de segmento.

Aun otra cosa: la funcion de entrada 'main' se define de tipo entero y como tal debe retornar un entero (0 por defecto):

Código C:
Ver original
  1. int main() {
  2.     ...
  3.     return 0;
  4. }


Y una observacion: el bucle donde pides los datos laborales (linea 40) está machacando las variables (sobreescribe), con lo que no puedes darle ninguna utilidad. Si quieres guardar los datos en memoria de ejecucion de forma ordenada puedes usar estructuras: en tu codigo ejecutas el ciclo 3 veces ( while (contadore<=2) ) puedes declarar un array de 3 estructuras para separar los datos:

Código C:
Ver original
  1. struct DATOS {
  2.     char empresa[256];
  3.     char dome[256];
  4. };
  5.  
  6. struct DATOS datos[3];
  7. int ctd = 0;
  8.  
  9. do {
  10.     printf("Ingrese nombre de la empresa:\t");
  11.     scanf("%s", datos_empresa[ctd].empresa);
  12.     printf("Ingrese domicilio de la empresa:\t");
  13.     scanf("%s", datos_empresa[ctd].dome);
  14.     ctd++;
  15. } while(ctd <= 2);

Lo siguiente ya es guardarlo en un archivo.

Saludos
vosk