• Viernes 8 de Noviembre de 2024, 14:43

Autor Tema:  Problema En La Comparacion De Caracteres!  (Leído 1253 veces)

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Problema En La Comparacion De Caracteres!
« en: Viernes 14 de Diciembre de 2007, 00:41 »
0
weno el problema es que me salta error en el if(vcat=='r') y no tengo idea porque!!

pd:no se porque todo el mensaje aparece tachado -_-

una municipalidad desea efectuar un control de la cobranza del impuesto en los 6 bimestres del ultimo año. existen 400 contribuyentes, numerados del 1 al 400.
1er lote ordenado por bimestre, con 18 registros, conteniendo los importes de los impuestos del ultimo año.
contiene:

bimestre (1 a 6)
categoria del contribuyente( 'r' residencial,'c' comercial,'y'country)
importe

2do lote tiene datos de los 400 contribuyentes .cada registro tiene.

numero de contribuyente (1 a 400)
categoria del contribuyente( 'r' residencial,'c' comercial,'y'country)

3er lote ordenado secuencialmete por numero de contribuyente, nos informa sobre cada pago efectuado. y tiene:

numero de contribuyente (1 a 400)
bimestre pagado.

finaliza con nro de contribuyente ==0

informar:

A)la deuda de cada contribuyente, con el siguiente formato

deudas registradas en el año 20xx

Contribuyente         Bimestres 1-2-3-4-5-6          Importe adeudado
   XXXX                    X X                         XXXXX.XX
   XXXX                   X X X
*****************************
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include<conio.h>
  4. #include <string.h>
  5.  
  6. void main (void)
  7. {
  8.   int b,imp,nc,vbr[2],vbc[2],vby[2];
  9.   char vcat[2][2],cat;
  10.   int mp[2][2]={0};
  11.  
  12.   for(int i=0; i<6; i++)
  13.   {
  14.     printf(" bimestre (1 a 2)  ");
  15.     scanf("%d",&b);
  16.     printf(" categoria contribuyente (r= residencial,c=comercial,y=country  ");
  17.     scanf("%c",&cat);
  18.     printf(" importe  ");
  19.     scanf("%d",&imp);
  20.  
  21.  
  22.     switch(cat)
  23.     {
  24.       case'r':
  25.       {
  26.         vbr[b-1]=imp;
  27.       }
  28.       case'c':
  29.       {
  30.         vbc[b-1]=imp;
  31.       }
  32.       case'y':
  33.       {
  34.         vby[b-1]=imp;
  35.       }
  36.     }
  37.   }
  38.  
  39.     for(int j=0; j<2; j++)
  40.   {
  41.     printf(" categoria contribuyente (r= residencial,c=comercial,y=country  ");
  42.     gets(vcat[j]);
  43.   }
  44.  
  45.     printf(" nro contribuyente (1 a 2)  ");
  46.     scanf("%d",&nc);
  47.  
  48.     while(nc!=0)
  49.     {
  50.       printf(" bimestre pagado (1 a 2)  ");
  51.       scanf("%d",&b);
  52.  
  53.       mp[nc-1][b-1]++;
  54.  
  55.       printf(" nro contribuyente (1 a 2)  ");
  56.       scanf("%d",&nc);
  57.     }
  58.  
  59.     for(int k=0; k<2; k++)
  60.     {
  61.       for(int s=0; s<2; s++)
  62.       {
  63.         if(mp[k][s]==0)
  64.         {
  65.         if(vcat[s]=='r')//necesito chekiar a que categoria pertenece nose porque me salta error :P
  66.           printf(" nro contribuyente %d bimestre %d deuda %d ",k+1,s+1,vbr[s]); //y aca mostraria
  67.         }                                                                        // el contribuyente
  68.                                                         //que no pago
  69.                                                                                    // y su deuda
  70.       }
  71.     }
  72. }
  73.  
  74.  

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema En La Comparacion De Caracteres!
« Respuesta #1 en: Viernes 14 de Diciembre de 2007, 02:35 »
0
Eel error es el siguiente:
Código: Text
  1.  
  2. if(vcat[s]=='r')//necesito chekiar a que categoria pertenece nose porque me salta error :P
  3.  
  4.  

estas comparando un string (cadena de caracteres) con un char, aunque un string solo tenga un caracter, internamente ocupa 2 espacios, uno para el caracter y otro par el "fin de cadena" (o nulo), asi que necesitas utilizar la funcion strcmp, para comparar cadenas, o comparar solamente el primer caracter.

Código: Text
  1.  
  2. if(vcat[s][1] == 'r')
  3.  
  4.  

o (mas correcto)

Código: Text
  1.  
  2. if(strcmp(vcat[s], "r") == 0)
  3.  
  4.  

el resultado de strcmp es = a cero, si las cadenas son iguales.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Problema En La Comparacion De Caracteres!
« Respuesta #2 en: Viernes 14 de Diciembre de 2007, 03:02 »
0
hi tengo una duda el programa funka pero no del todo bien cuando pongo que son todos de la categoria comercial o country me sigue mostrando la deuda de residencial -_- es por la funcion strcmp esa compara la longitud si tiene los misma cantidad de caracteres y como el if de residencial esta primero supongo entra ahi (no hace diferencia de R, C o Y)y muestra esa deuda siempre.. como hago para que acceda a la categoria que yo quiero

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include<conio.h>
  4. #include <string.h>
  5.  
  6. void main (void)
  7. {
  8.   int b,imp,nc,vbr[2],vbc[2],vby[2];
  9.   char vcat[2][2],cat;
  10.   int mp[2][2]={0};
  11.  
  12.   for(int i=0; i<6; i++)
  13.   {
  14.     printf(" bimestre (1 a 2)  ");
  15.     scanf("%d",&b);
  16.       fflush(stdin);
  17.     printf(" categoria contribuyente (r= residencial,c=comercial,y=country  ");
  18.     scanf("%c",&cat);
  19.     printf(" importe  ");
  20.     scanf("%d",&imp);
  21.  
  22.  
  23.     switch(cat)
  24.     {
  25.       case'r':
  26.       {
  27.         vbr[b-1]=imp;
  28.       }
  29.       case'c':
  30.       {
  31.         vbc[b-1]=imp;
  32.       }
  33.       case'y':
  34.       {
  35.         vby[b-1]=imp;
  36.       }
  37.     }
  38.   }
  39.  
  40.     for(int j=0; j<2; j++)
  41.   {
  42.       fflush(stdin);
  43.     printf(" categoria contribuyente (r= residencial,c=comercial,y=country  ");  //si cargo todo de Comercial
  44.     gets(vcat[j]);                                                               //
  45.   }
  46.  
  47.     printf(" nro contribuyente (1 a 2)  ");
  48.     scanf("%d",&nc);
  49.  
  50.     while(nc!=0)
  51.     {
  52.       printf(" bimestre pagado (1 a 2)  ");
  53.       scanf("%d",&b);
  54.  
  55.       mp[nc-1][b-1]++;
  56.  
  57.       printf(" nro contribuyente (1 a 2)  ");
  58.       scanf("%d",&nc);
  59.     }
  60.  
  61.     for(int k=0; k<2; k++)
  62.     {
  63.       for(int s=0; s<2; s++)
  64.       {
  65.         if(mp[k][s]==0)
  66.         {
  67.         if(strcmp(vcat[s],"r")==0) //estos if solo toman residencial debe ser por la funcion strcmp
  68.           printf(" nro contribuyente %d bimestre %d deuda %d \n",k+1,s+1,vbr[s]);     // si pongo otra categoria
  69.         if(strcmp(vcat[s],"c")==0)                                                    // que no sea residencial
  70.           printf(" nro contribuyente %d bimestre %d deuda %d \n",k+1,s+1,vbr[s]);     //igual me sigue mostrando
  71.         if(strcmp(vcat[s],"y")==0)                                                    // la deuda de residencial
  72.           printf(" nro contribuyente %d bimestre %d deuda %d \n",k+1,s+1,vbr[s]);     // en ves de la comercial
  73.         }
  74.  
  75.       }
  76.  
  77.  
  78.     }
  79. }
  80.  
  81.  

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Problema En La Comparacion De Caracteres!
« Respuesta #3 en: Viernes 14 de Diciembre de 2007, 03:14 »
0
listo arreglado perdonen :P

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include<conio.h>
  4. #include <string.h>
  5.  
  6. void main (void)
  7. {
  8.   int b,imp,nc,vbr[2],vbc[2],vby[2];
  9.   char vcat[2][2],cat;
  10.   int mp[2][2]={0};
  11.  
  12.   for(int i=0; i<6; i++)
  13.   {
  14.     printf(" bimestre (1 a 2)  ");
  15.     scanf("%d",&b);
  16.       fflush(stdin);
  17.     printf(" categoria contribuyente (r= residencial,c=comercial,y=country  ");
  18.     scanf("%c",&cat);
  19.     printf(" importe  ");
  20.     scanf("%d",&imp);
  21.  
  22.  
  23.     switch(cat)
  24.     {
  25.       case'r':
  26.       {
  27.         vbr[b-1]=imp;
  28.       }
  29.       case'c':
  30.       {
  31.         vbc[b-1]=imp;
  32.       }
  33.       case'y':
  34.       {
  35.         vby[b-1]=imp;
  36.       }
  37.     }
  38.   }
  39.  
  40.     for(int j=0; j<2; j++)
  41.   {
  42.       fflush(stdin);
  43.     printf(" categoria contribuyente (r= residencial,c=comercial,y=country  ");
  44.     gets(vcat[j]);                                                              
  45.   }
  46.  
  47.     printf(" nro contribuyente (1 a 2)  ");
  48.     scanf("%d",&nc);
  49.  
  50.     while(nc!=0)
  51.     {
  52.       printf(" bimestre pagado (1 a 2)  ");
  53.       scanf("%d",&b);
  54.  
  55.       mp[nc-1][b-1]++;
  56.  
  57.       printf(" nro contribuyente (1 a 2)  ");
  58.       scanf("%d",&nc);
  59.     }
  60.  
  61.     for(int k=0; k<2; k++)
  62.     {
  63.       for(int s=0; s<2; s++)
  64.       {
  65.         if(mp[k][s]==0)
  66.         {
  67.         if(strcmp(vcat[s],"r")==0)
  68.           printf(" nro contribuyente %d bimestre %d deuda %d \n",k+1,s+1,vbr[s]);
  69.         if(strcmp(vcat[s],"c")==0)
  70.           printf(" nro contribuyente %d bimestre %d deuda %d \n",k+1,s+1,vbc[s]);
  71.         if(strcmp(vcat[s],"y")==0)
  72.           printf(" nro contribuyente %d bimestre %d deuda %d \n",k+1,s+1,vby[s]);
  73.         }
  74.  
  75.       }
  76.  
  77.  
  78.     }
  79. }
  80.  
  81.