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();
}
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


0