Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kavookavala

[Resolvido] Vetor de um elemento da struct

Recommended Posts

Estou fazendo um programa de conversão de bases, tenho que faze-lo sem usar funções especificas para a conversão e também tenho que criar uma struct para armazenar as conversões realizadas

 

cheguei a isso

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define n 10
int k=0,m=0,i,j,aux;
struct  
       {
          char b2[30],res[30],desc[30];
          int b1;
       } conv[n];
       

void dec_bin()
  {
                  
        printf ("Digite o N%cmero a ser convertido para bin%cario : ",163,160);
        scanf("%d",&conv[m].b1);    
        
        aux=conv[m].b1;
        for (i=0;conv[m].b1>=1;i++)
            {
                conv[m].b2[i]=conv[m].b1%2+48;
// erro  'invalid types `int[int]' for array subscript 
                conv[m].b1/=2;
            }
            conv[m].b2[i]='\0';
      
        for (i=0, j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            conv[m].res[i]=conv[m].b1[j];
        conv[m].res[i]='\0';
        conv[m].b1=aux;
       
        printf("\n\n O N%cmero %d convetido para Bin%crio %c = %s",163,conv[m].b1,160,130,conv[m].res);
        getch();          
   
            
  }

void bin_dec()

  {    
                     
        conv[m].b1=0;    
        printf ("Digite o N%cmero a ser convertido para Decimal : ",163);
        gets(conv[m].b2);
     
        for (i=0,j=strlen(conv[m].b2)-1;j>=0;i++,j--)
           conv[m].b1+=(conv[m].b2[j]-48)*pow(2,i);   

        printf("\n\n O N%cmero %s convetido para Decimal %c = %s",163,conv[m].b2,130,conv[m].b1);
        getch();  
           
 }

void oct_dec()
 
 {

             
        conv[m].b1=0;
        printf ("Digite o N%cmero a ser convertido para Decimal : ",163);
        gets(conv[m].b2);
     
        for (i=0,j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            conv[m].b1+=(conv[m].b2[j]-48)*pow(8,i);
          

        printf("\n\n O N%cmero %d convetido para Decimal %c = %s",163,conv[m].b2,130,conv[m].b1);
        getch();     
       
 }

void dec_oct()
 
 {
               
        printf ("Digite o N%cmero a ser convertido para Octal : ",163);
        scanf("%d",&conv[m].b1);    
        aux=conv[m].b1;
        for (i=0;conv[m].b1>=1;i++)
            {
                conv[m].b2[i]=conv[m].b1%8+48;
                conv[m].b1/=8 ;
            }
            conv[m].b2[i]='\0';
      
        for (i=0, j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            conv[m].res[i]=conv[m].b2[j];
        conv[m].res[i]='\0';
        conv[m].b1=aux;
       
        printf("\n\n O N%cmero %d convetido para Octal %c = %s",163,conv[m].b1,130,conv[m].res);
        getch();          
 }

void hexa_dec()

 {
             
        conv[m].b1=0;
        printf ("Digite o N%cmero a ser convertido para Decimal : ",163);
        gets(conv[m].b2);
        strupr(conv[m].b2);
     
        for (i=0,j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            {
                if(conv[m].b2[i]>=65)
                    conv[m].b1+=(conv[m].b2[j]-55)*pow(16,i);
                else
                    conv[m].b1+=(conv[m].b2[j]-48)*pow(16,i);
            }

       printf("\n\n O N%cmero %d convetido para Decimal %c = %s",163,conv[m].b2,130,conv[m].b1);
       getch();         
 }

void dec_hexa ()

 {    
        printf ("Digite o N%cmero a ser convertido para Hexadecimal : ",163);
        scanf("%d",&conv[m].b1);    
        aux=conv[m].b1;
        for (i=0;conv[m].b1>=1;i++)
            {
                
                conv[m].b2[i]=conv[m].b1%16;
                conv[m].b1/=16;
     
                if(conv[m].b2[i]>=10)
                     conv[m].b2[i]+=55;       
                else
                     conv[m].b2[i]+=48;
            }
        conv[m].b2[i]='\0';
        conv[m].b1=aux;
      
        for (i=0, j=strlen(conv[m].b2)-1;j>=0;i++,j--)
             conv[m].res[i]=conv[m].b2[j];
        conv[m].res[i]='\0';
        printf("\n\n O N%cmero %d convetido para Hexadecimal %c = %s",163,conv[m].b1,130,conv[m].res);
        getch();     
 }       

main()
 
  {
        for (m=0;m<n && k!=8;m++)
       
           printf("\n             Oi, como vai você? ");
           printf("\n\n-------------------------------------------------------------\n");
           printf("\n\n     Escolha abaixo qual conversão deseja realizar. ");
           printf("\n\n\n  1. Decimail para Bin%crio",160);
           printf("\n  2. Decimal para Octal");
           printf("\n  3. Decinal para Hexadecimal");
           printf("\n\n  4. Bin%crio para Decimal",160);
           printf("\n  5. Octal para Decimal");
           printf("\n  6. Hexadecimal para Decimal");
           printf("\n  7. Histórico de convers%ces",228);
           printf("\n  8. Sair\n");
           printf("\n  Op%c%co => ",135,198);
           scanf("%d",&k);
           system("cls");
          
      
           if (k<1 || k>7)
               {
                   printf("N%cmero errado!    Digite uma Op%c%co V%clida",163,135,198,160);
                   getch();
                   system("cls");
               }    
           if(k==1)
               dec_bin();
           if(k==2)
              dec_oct();
           if(k==3)
              dec_hexa();
           if(k==4)
              bin_dec();
           if(k==5)
              oct_dec();
           if(k==6)
              hexa_dec();    
}

 

o que pode ter ocasionado esse erro!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem entendi entender a lógica, + percebi que:

struct  
       {
          char b2[30],res[30],desc[30];
          int b1;
       } conv[n];
Você declara b1 como inteiro;

e qr acessar alguma posição dele???

conv[m].res[i]=conv[m].b1[j];

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado,

mas já consegui resolver meu problema,

é o que você falou msm

eu fiz errado na verdade era assim

conv[m].res[i]=conv[m].b2[j];

agora está rodando,

mais está

com outros problemas, quando vou converter de qualquer

base para decimal o programa o programa da erro e diz

que precisa ser fechado.

 

vou comentar o programa no post anterior e vê se consegue entender!!!

ae você tenta entender e você se pode me ajudar!!!

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define n 10
int k=0,m=0,i,j,aux;
struct  
       {
          char b2[30],res[30],desc[30];
          int b1;
       } conv[n];
       

void dec_bin()
  {
                  
        printf ("Digite o Decimal a ser convertido para bin%cario : ",160);
        scanf("%d",&conv[m].b1);    
        
        aux=conv[m].b1;
        for (i=0;conv[m].b1>=1;i++)
            {
                conv[m].b2[i]=conv[m].b1%2+48;/*conv[m].b2[i] vai receber 0 ou 1 e por ser char soma-se 48 para receber o codigo asc de 0 e 1 que são 48 e 49 respctivamente  a mesma logica é usada para tranformar em hexadecimal ou para octal*/
                conv[m].b1/=2;
            }
            conv[m].b2[i]='\0';
      
        for (i=0, j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            conv[m].res[i]=conv[m].b2[j];
        conv[m].res[i]='\0';
        conv[m].b1=aux;
       
        printf("\n\n O Decimal %d convetido para Bin%crio %c = %s",conv[m].b1,160,130,conv[m].res);
        getch();          
   
            
  }

void bin_dec()

  {    
                     
        conv[m].b1=0;    
        printf ("Digite o Bin%crio a ser convertido para Decimal : ",160,163);
        scanf("%s",&conv[m].b2);
     
        for (i=0,j=strlen(conv[m].b2)-1;j>=0;i++,j--)
           conv[m].b1+=(conv[m].b2[j]-48)*pow(2,i);   

        printf("\n\n O Bin%crio %s convetido para Decimal %c = %s",160,163,conv[m].b2,130,conv[m].b1);
        getch();  
           
 }

void oct_dec()
 
 {

             
        conv[m].b1=0;
        printf ("Digite o octal a ser convertido para Decimal : ");
        scanf("%s",&conv[m].b2);
     
        for (i=0,j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            conv[m].b1+=(conv[m].b2[j]-48)*pow(8,i);
          

        printf("\n\n O Octal %d convetido para Decimal %c = %s",conv[m].b2,130,conv[m].b1);
        getch();     
       
 }

void dec_oct()
 
 {
               
        printf ("Digite o Decimal a ser convertido para Octal : ");
        scanf("%d",&conv[m].b1);    
        aux=conv[m].b1;
        for (i=0;conv[m].b1>=1;i++)
            {
                conv[m].b2[i]=conv[m].b1%8+48;
                conv[m].b1/=8 ;
            }
            conv[m].b2[i]='\0';
      
        for (i=0, j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            conv[m].res[i]=conv[m].b2[j];
        conv[m].res[i]='\0';
        conv[m].b1=aux;
       
        printf("\n\n O Decimal %d convetido para Octal %c = %s",conv[m].b1,130,conv[m].res);
        getch();          
 }

void hexa_dec()

 {
             
        conv[m].b1=0;
        printf ("Digite o Hexadecimal a ser convertido para Decimal : ");
        scanf("%s",&conv[m].b2);
        strupr(conv[m].b2);
     
        for (i=0,j=strlen(conv[m].b2)-1;j>=0;i++,j--)
            {
                if(conv[m].b2[i]>=65)
                    conv[m].b1+=(conv[m].b2[j]-55)*pow(16,i);
                else
                    conv[m].b1+=(conv[m].b2[j]-48)*pow(16,i);
            }

       printf("\n\n O Hexadecimal %d convetido para Decimal %c = %s",conv[m].b2,130,conv[m].b1);
       getch();         
 }

void dec_hexa ()

 {    
        printf ("Digite o Decimal a ser convertido para Hexadecimal : ");
        scanf("%d",&conv[m].b1);    
        aux=conv[m].b1;
        for (i=0;conv[m].b1>=1;i++)
            {
                
                conv[m].b2[i]=conv[m].b1%16;
                conv[m].b1/=16;
     
                if(conv[m].b2[i]>=10)
                     conv[m].b2[i]+=55;       
                else
                     conv[m].b2[i]+=48;
            }
        conv[m].b2[i]='\0';
        conv[m].b1=aux;
      
        for (i=0, j=strlen(conv[m].b2)-1;j>=0;i++,j--)
             conv[m].res[i]=conv[m].b2[j];
        conv[m].res[i]='\0';
        printf("\n\n O Decimal %d convetido para Hexadecimal %c = %s",conv[m].b1,130,conv[m].res);
        getch();     
 }       

main()
 
  {
        for (m=0;m<n && k!=8;m++)
        {
           system("cls");
           printf("\n             Oi, como vai você? ");
           printf("\n\n-------------------------------------------------------------\n");
           printf("\n\n     Escolha abaixo qual conversão deseja realizar. ");
           printf("\n\n\n  1. Decimal para Bin%crio",160);
           printf("\n  2. Decimal para Octal");
           printf("\n  3. Decinal para Hexadecimal");
           printf("\n\n  4. Bin%crio para Decimal",160);
           printf("\n  5. Octal para Decimal");
           printf("\n  6. Hexadecimal para Decimal");
           printf("\n  7. Hist%crico de convers%ces",162,228);
           printf("\n  8. Sair\n");
           printf("\n  Op%c%co => ",135,198);
           scanf("%d",&k);
           system("cls");
          
      
           if (k<1 || k>8)
               {
                   printf("N%cmero errado!    Digite uma Op%c%co V%clida",163,135,198,160);
                   getch();
                   system("cls");
               }    
           if(k==1)
               dec_bin();
           if(k==2)
              dec_oct();
           if(k==3)
              dec_hexa();
           if(k==4)
              bin_dec();
           if(k==5)
              oct_dec();
           if(k==6)
              hexa_dec();   
}               
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que você consegue visualizar seu erro:

void bin_dec()

  {

        conv[m].b1=0;
        printf ("Digite o Bin%crio a ser convertido para Decimal : ",160,163);
        scanf("%s",&conv[m].b2);

        for (i=0,j=strlen(conv[m].b2)-1;j>=0;i++,j--) conv[m].b1+=(conv[m].b2[j]-48)*pow(2,i);

        //printf("\n\n O Bin%crio %s convetido para Decimal %c = %s",160,163,conv[m].b2,130,conv[m].b1);
        printf("aaa"); //Coloquei só para testar se chegava até aki
        getch();

 }

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pôôô manooo ainda comentei a linha que da o erro kkk.

ao invez de:

printf("\n\n O Bin%crio %s convetido para Decimal %c = %s",160,163,conv[m].b2,130,conv[m].b1);
tente:

printf("\n\n O Bin%crio %s convertido para Decimal %c = %d",160, conv[m].b2,130,conv[m].b1);

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.