C/Visual C - problemas en ejecucion programa

 
Vista:

problemas en ejecucion programa

Publicado por alberto rodas (1 intervención) el 02/02/2007 13:03:30
hola:
necesito por favor si alguien me puede ayudar:
este programa pide entrar por teclado un numero n con la cantidad de
elementos de un vector,luego cargarlos .cada elemento del mismo tiene apellido y nombre
direccion ,telefono y sueldo.
la funcion calcular calcula el total del sueldo abonado a todas las ppersonas ingresadas.
(con esta parte no hay problemas).
el tema es con la funcion modificar ,en la cual tengo que a cada apellido y
nombre ,si la ultima letra es 'a' tengo que agregarle delante
"Sra" ,y si es 'o' agrgarle "Sr"
ejemplo: en el vector tengo :rodriguez Alberto ,el elemento modificado seria
"Sr rodriguez Alberto"
el problema esta cuando muestra los valores modificados
(cuando hace la invocacion de la funcion mostrar por segunda vez en el
prog ppal)
,ya que hice un seguimiento
poniendo la funcion puts en cada caso y en los if entra correctamente y concatena SRa y Sr
segun sea el caso..
en la ejecucion sale un mensaje que dice "thread violatiion fault access violation
read of addres" (pone una direccion de memoria).
el programa lo corro sobre windows xp ,con 512 mb RAM (no creo que este dato sea relevante ,pero lo comento por las dudas).

si por favor alguien me ayuda ,agradecido.


#include<iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
typedef struct
{
char ayn[50]; // apellido y nombre
char dir[60]; // dirección
char tel[30]; // teléfono
float sueldo; // sueldo
} tabla;

void numero(int *n)
{
printf("\nIngrese la cantidad de elementos:\n");
scanf("%d", n);
if (n <= 0)
{
printf("\nERROR: La cantidad debe ser mayor que 0\n");
exit(1);
}
}

tabla *crear(int n)
{
tabla *t;
t = (tabla *)malloc(n * sizeof(tabla));
if (NULL == t)
{
printf("\nERROR creando tabla\n");
exit(2);
}
return t;
}

void cargar(tabla t[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("\nApellido y nombre[%d]:\n", i + 1);
fflush(stdin);
gets(t[i].ayn);
printf("Direccion[%d]:\n", i + 1);
gets(t[i].dir);
printf("Telefono[%d]:\n", i + 1);
gets(t[i].tel);
printf("Sueldo[%d]\n", i + 1);
scanf("%f", &t[i].sueldo);
}
}

void mostrar(tabla t[], int n)
{
int i;
printf("\n");
for (i = 0; i < n; i++)
printf("%s; %s; %s; %.2f\n", t[i].ayn, t[i].dir, t[i].tel, t[i].sueldo);
printf("\n");
}

void calcular(tabla t[], int n) // n es la cantidad de elementos de la tabla t
{
int i;float total=0;
printf("\n");
for (i = 0; i < n; i++) {

total+=t[i].sueldo;

}
printf("el total de sueldo es:%2f",total);

}

void modificar(tabla t[], int n) // n es la cantidad de elementos de la tabla t
{
int i;
char auxape[50],auxape2[55],fem[5],masc[4];

for (i = 0; i < n; i++)
{
strcpy(auxape,"");
strcpy(auxape2,"");
strcpy(fem,"");
strcpy(masc,"");
strcpy(fem,"Sra ");
strcpy(masc,"Sr ");
puts(fem);
puts(masc);
getch();
strcpy(auxape,t[i].ayn);
strcpy(t[i].ayn,"");
puts(auxape);
getch();
if(auxape[strlen(auxape)-1]=='a'){
strcat(fem,auxape);
strcpy(auxape2,fem);
strcpy(t[i].ayn,auxape2);
puts(t[i].ayn);
getch();

}
if(auxape[strlen(auxape)-1]=='o'){
strcat(masc,auxape);
strcpy(auxape2,masc);
strcpy(t[i].ayn,auxape2);
puts(t[i].ayn);
getch();

}

}
}
//fin de funcion modificar
//***programa principal
void main()
{
tabla *tab;
int n;
numero(&n);
tab = crear(n);
cargar(tab, n);
printf("\nDatos ingresados:\n");
mostrar(tab, n);
calcular(tab, n);
modificar(tab, n);
printf("\nDatos modificados:\n");
mostrar(tab, n);
free(tab);
getch();
}


Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemas en ejecucion programa

Publicado por maree (15 intervenciones) el 02/02/2007 16:54:03
Hola, otra vez, lo unico q tienes q hacer es cambiar el tamaño de fem y masc a 55 cada uno.

strcat(fem,auxape); strcat(masc,auxape); Con estas lineas lo q haces en concatenar a la cadena fem o masc el contenido de auxape. Pero si el tamaño de fem y masc es solo 4 o 5, cuando le concatenas la otra cadena, se pasa del tamaño declarado, por esto el error q estas obteniendo.

Bueno, espero te sirva, bye..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar