C/Visual C - problemas con programa

 
Vista:

problemas con programa

Publicado por alberto rodas (3 intervenciones) el 31/01/2007 13:08:10
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 y a cada direccion ,tengo que modificarlos de manera que me quede c
ada palabra al principio
con su primera letra en mayuscula (cada direccion y nombre y apellido puede estar separado
por uno o mas espacios) .
ejemplo: en el vector tengo como primer nombre jorge rodriguez
con la funcion modificar debe quedar en el vector original: Jorge Rodriguez
(con mayuscula y separado por un solo espacio)
el programa corre y compila ,pero no tengo el reultado esperado.
si por favor aluien me ayuda ,agradecido.

#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);

}
//aca empieza el problema -----------------

void modificar(tabla t[], int n) // n es la cantidad de elementos de la tabla t
{
char *p;int i,largo;
char auxape[50],auxdir[60],auxape2[50],auxdir2[60];

for (i = 0; i < n; i++)
{
char auxi1[50]={'\0'};
strcpy(auxape,t[i].ayn);
p=strtok(auxape," ");

while (p!=NULL){

strcpy(auxape2,p);
largo=strlen(auxape2);
auxape2[0]=toupper(auxape2[0]);
auxape2[largo]=' ';
strcpy(auxi1,auxape2);
p=strtok(NULL," ");
}
strcpy(t[i].ayn,auxi1);

}
//fin primer for

for (i = 0; i < n; i++)
{
char auxi2[60]={'\0'};
strcpy(auxdir,t[i].dir);
p=strtok(auxdir," ");

while (p!=NULL){

strcpy(auxdir2,p);
largo=strlen(auxdir2);
auxape2[0]=toupper(auxdir2[0]);
auxape2[largo]=' ';
strcpy(auxi2,auxdir2);
p=strtok(NULL," ");
}
strcpy(t[i].dir,auxi2);

}
}
//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 con programa

Publicado por Tom (619 intervenciones) el 31/01/2007 18:19:56
En lugar de
strcpy(auxi1,auxape2);
deberías hacer
strcat(auxi1, auxape2);

Lee la documentacion de esas funciones, _por_favor_, que te hará mucho bien ;-) (¿ Eres el mismo del strcat y el toupper ?).
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

RE:problemas con programa

Publicado por alberto rodas (3 intervenciones) el 31/01/2007 19:17:40
gracias por el consejo .no soy la persona a la que te referis.gracias nuevamente
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

RE:problemas con programa

Publicado por maree (15 intervenciones) el 31/01/2007 20:59:39
Hola, aca te dejo la modificacion de tu programa, son simple detallitos los q te hacian falta y muy pocas cosas q ajustar

#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++)
{

t[i].sueldo = 0;
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); fflush(stdin);

}
}

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

}
//aca empieza el problema -----------------

void modificar(tabla t[], int n) // n es la cantidad de elementos de la tabla t
{
char *p;int i,largo;
int c;
char auxape[50],auxdir[60],auxape2[50],auxdir2[60];

for (i = 0; i < n; i++)
{
strcpy(auxape, t[i].ayn);
strcpy(t[i].ayn, "");
p=strtok(auxape," ");

c = 0;
while (p!=NULL)
{
strcpy(auxape2,p);
auxape2[0]=toupper(auxape2[0]);
strcat(t[i].ayn,auxape2);
strcat(t[i].ayn, " ");
p=strtok(NULL," ");
c++;
}

}
//fin primer for

for (i = 0; i < n; i++)
{
strcpy(auxdir,t[i].dir);
p=strtok(auxdir," ");
strcpy(t[i].dir, "");

c = 0;
while (p!=NULL)
{
strcpy(auxdir2,p);
auxdir2[0]=toupper(auxdir2[0]);
strcat(t[i].dir,auxdir2);
strcat(t[i].dir, " ");
p=strtok(NULL," ");
c++;
}



}
}
//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\n");
mostrar(tab, n);
free(tab);
getch();
}

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

gracias a todos por la ayuda!!

Publicado por alberto rodas (3 intervenciones) el 01/02/2007 13:47:57
gracias a todos por la ayuda!!!!!!
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