/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

error con strcpy

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
m@o_614



Registrado: 13 Dic 2011
Mensajes: 19

MensajePublicado: 18/12/2011 10:30 pm
Título: error con strcpy

tengo mi codigo, pero tengo problemas con el strcpy que en la funcion lista_ingreso_anual el programa no hace lo que le pido:

#include <stdio.h>
#include <stdlib.h>
//constantes//
#define IVA 16.0f
#define POR_RET_IVA 10.0f
#define POR_RET_ISR 10.0f
#define CAPTURA_MES 1
#define CAP_INGRESO 2
#define CAP_GASTOS 3
#define L_INGR_ANUALES 4
#define L_GAST_ANUALES 5
#define CALC_IMPUESTOS 6
#define SALIR 7
#define MESES 12
#define GASTOS 20
#define INGRESOS 20

void mostrar_menu();
void captura_mes();
void captura_ingreso();
void captura_gasto();
void lista_ingreso_anual();
void lista_gasto_anual();
float monto(float ganancia_bruta);
void calculo_impuestos();
void inicializa();

typedef struct registro1
{
char concepto[30+1];
char RFC[21+1];
float monto;
int mes;
struct registro1* sig;

}ingreso;

typedef struct registro2
{
char concepto[30+1];
char RFC[21+1];
float monto;
int mes;
struct registro2* sig;
}gasto;

//variables globales de uso interno del programa//
char *meses[MESES];
int m,contador=0,mes,reg,porcentaje_ISR[3];
float rango_monto[3][2];
//arreglo de ingresos y gastos//
float gastos_meses[GASTOS],ingreso_meses[INGRESOS];

int main()
{
//variables de programa modificables por el usuario//
ingreso *info_registro1;
gasto *info_registro2;

int opcion,continuar = 1;
inicializa();
do
{
mostrar_menu();
scanf("%d",&opcion);
switch(opcion)
{
case CAPTURA_MES:
captura_mes();
break;
case CAP_INGRESO:
captura_ingreso();
break;
case CAP_GASTOS:
captura_gasto();
break;
case L_INGR_ANUALES:
lista_ingreso_anual();
break;
case L_GAST_ANUALES:
lista_gasto_anual();
break;
case CALC_IMPUESTOS:
calculo_impuestos();
break;
case SALIR:
continuar = 0;
break;
default:printf("Opcion no valida!\n");
}
if(continuar){
system("pause");
}
}while(continuar);
return 0;
}

void inicializa()
{
reg=0;
m=0;
mes=1;
meses[0]="Enero";
meses[1]="Febrero";
meses[2]="Marzo";
meses[3]="Abril";
meses[4]="Mayo";
meses[5]="Junio";
meses[6]="Julio";
meses[7]="Agosto";
meses[8]="Septiembre";
meses[9]="Octubre";
meses[10]="Noviembre";
meses[11]="Diciembre";
rango_monto[0][0]=0;
rango_monto[0][1]=10000.00;
rango_monto[1][0]=10000.00;
rango_monto[1][1]=20000.00;
rango_monto[2][0]=20000.00;
rango_monto[2][1]=10000000.00;
porcentaje_ISR[0]=11;
porcentaje_ISR[1]=15;
porcentaje_ISR[2]=20;
}

void mostrar_menu()
{
ingreso*info_registro1;
ingreso*nuevo;
nuevo=info_registro1;
system("cls");
printf("CALCULO DE IMPUESTOS ANUAL\n\n");
printf("Menu principal:\n");
printf("1. Establecer mes para la captura (mes actual es %s)\n",meses[mes-1]);
printf("2. Captura de ingresos\n");
printf("3. Captura de gastos\n");
printf("4. Mostrar lista de ingresos anual\n");
printf("5. Mostrar lista de gastos anual\n");
printf("6. Calculo de impuestos anual\n");
printf("7. Salir\n");
printf("Opcion: ");
}

void captura_mes()
{
int indice;
printf("Establecer mes para captura\n");
for(contador=0,indice=0;contador<MESES;contador++,indice++)
printf("%d) %s\n",indice+1,meses[contador]);
printf("Elige el mes (1 a 12):\n");
fflush(stdin);
scanf("%d",&m);
if(m > 12)
printf("Mes no valido!\n");
else
{
printf("Se ha establecido el mes de captura en %s\n",meses[m-1]);
mes = m;
}
}

void captura_ingreso()
{
ingreso*info_registro1;
ingreso*nuevo;
nuevo=(ingreso*)malloc(sizeof(ingreso));
nuevo->sig=info_registro1->sig;
info_registro1->sig=nuevo;

printf("Captura ingresos\n");
printf("Dame un ingreso mas para el mes de %s: \n",meses[m-1]);
printf("Provee datos para el ingreso %d.\n",reg);
if(reg>INGRESOS)
printf("no hay mas espacio\n");
printf("RFC:");
fflush(stdin);
gets(nuevo->RFC);
printf("Concepto:");
fflush(stdin);
gets(nuevo->concepto);
printf("Monto:");
fflush(stdin);
scanf("%f",&nuevo->monto);
nuevo->mes=m;
++reg;
}

void captura_gasto()
{
gasto*info_registro2;
gasto*nuevo;
nuevo=(gasto*)malloc(sizeof(gasto));
nuevo->sig=info_registro2->sig;
info_registro2->sig=nuevo;

printf("Captura gastos\n");
printf("Dame el gasto del mes de %s: \n",meses[m-1]);
printf("Provee datos para el gasto %d.\n",reg);
if(reg>GASTOS)
printf("no hay mas espacio\n");
printf("Concepto:");
fflush(stdin);
gets(nuevo->concepto);
printf("Monto:");
fflush(stdin);
scanf("%f",&nuevo->monto);
nuevo->mes=m;
++reg;
}

void lista_ingreso_anual()
{
ingreso*info_registro1;
ingreso*nuevo;
nuevo=info_registro1->sig;
int indice=0;
printf("Mostrar lista de ingresos anual\n\n");
printf("Indice Mes\tMonto\tRFC\t\tConcepto\n");
printf("%d",indice);
printf("%s",meses[nuevo->mes]);
strcpy(ingreso_meses[],"nuevo->monto");
strcpy(ingreso_meses[],"nuevo->RFC");
strcpy(ingreso_meses[],"nuevo->concepto");
}

void lista_gasto_anual()
{
printf("Mostrar lista de gastos anual\n");
for(contador=0;contador<MESES;contador++)
printf("%s = %.2f\n",meses[contador],gastos_meses[contador]);
}

float monto(float gan_bruta)
{
float por_isr;
if((gan_bruta>rango_monto[0][0])&&(gan_bruta<=rango_monto[1][0]))
por_isr= porcentaje_ISR[0];
else
if((gan_bruta>rango_monto[1][0])&&(gan_bruta<=rango_monto[2][0]))
por_isr= porcentaje_ISR[1];
else
if(gan_bruta>rango_monto[2][0])
por_isr= porcentaje_ISR[2];
else
por_isr=0.00;

return(por_isr);
}

void calculo_impuestos()
{
int contador;
float iva,subtotal,ret_isr,ret_iva,total,gan_bruta,isr,gan_neta,isr_pag,gasto_iva,iva_pag;
float por_isr,ingreso_total,gasto_total;

for(contador=0;contador<=MESES;contador++)
{
ingreso_total=ingreso_meses[contador];
gasto_total=gastos_meses[contador];
}
iva=(ingreso_total*IVA)/100;
subtotal=ingreso_total+iva;
ret_isr=(ingreso_total*POR_RET_ISR)/100;
ret_iva=(ingreso_total*POR_RET_IVA)/100;
total=subtotal-(ret_isr+ret_iva);
gan_bruta=(ingreso_total-gasto_total);
por_isr=monto(gan_bruta);
isr=(gan_bruta*por_isr)/100;
gan_neta=(gan_bruta-isr);
isr_pag=(isr-ret_isr);
gasto_iva=(gasto_total*IVA)/100;
iva_pag=(iva-gasto_iva-ret_iva);
printf("CALCULO DE IMPUESTOS\n\n");
printf("***Tabla de Recibo de Honorarios***\n");
printf("Ingresos\t\t%.2f\n",ingreso_total);
printf("(+) IVA\t\t\t%.2f\n",iva);
printf("(=) Subtotal\t\t%.2f\n",subtotal);
printf("(-) Retención ISR\t%.2f\n",ret_isr);
printf("(-) Retención IVA\t%.2f\n",ret_iva);
printf("(=) Total\t\t%.2f\n",total);
printf("***Tabla Ganancias***\n");
printf("Ingresos\t\t%.2f\n",ingreso_total);
printf("(-) Gastos\t\t%.2f\n",gasto_total);
printf("(=) Ganancia Bruta\t%.2f\n",gan_bruta);
printf("(-) ISR %.2f%%\t\t%.2f\n",por_isr,isr);
printf("(=) Ganancia Neta\t%.2f\n",gan_neta);
printf("***Tabla ISR***\n");
printf("ISR %.2f%%\t\t%.2f\n",por_isr,isr);
printf("(-) ISR Retenido\t%.2f\n",ret_isr);
printf("(=) ISR a Pagar\t\t%.2f\n",isr_pag);
printf("***Tabla IVA***\n");
printf("IVA\t\t\t%.2f\n",iva);
printf("(-) Gastos IVA\t\t%.2f\n",gasto_iva);
printf("(-) Retención IVA\t%.2f\n",ret_iva);
printf("(=) IVA a Pagar\t\t%.2f\n",iva_pag);
}
compila bien pero en la linea 225,226 y 227 me sale un warning

passing arg 1 of strcpy from incompatible pointer type

que hago ahi???
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 6586
Ubicación: Mexico

MensajePublicado: 19/12/2011 10:36 am
Título:

Los errores en esas lineas son varios:

1) Antes de utilizar la función "strcpy" debes incluir el encabezado <string.h> (para tener en ámbito el prototipo de la función).

2) Cuando se utiliza el nombre de un array como argumento a función debe ser solo, sin los corchetes (ya que estos son un operador binario).

3) El array "ingreso_meses" es un array de floats mientras que la función strcpy es para copiar cadenas (secuencias de caracteres terminadas con '\0').

Un saludo
_________________
Memory never recaptures reality. Memory reconstructs. All reconstructions change the original, becoming external frames of reference that inevitably fall short.
--
Mentat Handbook
Volver arriba
m@o_614



Registrado: 13 Dic 2011
Mensajes: 19

MensajePublicado: 19/12/2011 10:44 am
Título:

ya quite los corchetes, puse el <string.h> y cambie el arreglo de floats por uno de estructuras

lo puse asi:

typedef struct registro1
{
char concepto[30+1];
char RFC[21+1];
float monto;
int mes;
struct registro1* sig;

}ingreso;

typedef struct registro2
{
char concepto[30+1];
char RFC[21+1];
float monto;
int mes;
struct registro2* sig;
}gasto;

gastos gasto[GASTOS],ingresos ingreso[INGRESOS];

pero en esta ultima linea me aparece sintax error before gasto.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 6586
Ubicación: Mexico

MensajePublicado: 19/12/2011 2:24 pm
Título:

Porque el tipo que tu declaraste para almacenar los gastos se llama gasto, sin la 's' al final.

Ademas de eso el programa esta lleno de "fflush(stdin)" y gets, algo que se debería evitar (lo primero mediante un bucle para eliminar el resto de la linea y lo segundo remplazando "gets" por "fgets").

Un saludo
_________________
Memory never recaptures reality. Memory reconstructs. All reconstructions change the original, becoming external frames of reference that inevitably fall short.
--
Mentat Handbook
Volver arriba
m@o_614



Registrado: 13 Dic 2011
Mensajes: 19

MensajePublicado: 20/12/2011 1:10 pm
Título:

muchas gracias Very Happy
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com