/t/calculadora-infinita/330513
Estava com esse problema,uso CODEBLOCKS por causa da facul,evolui um pouco e fiz isso:(foi mal,o site não formatou muito bem,eu acho…)
crie um txt com dois numeros enormes e guarde na mesma pasta do projeto e veja a minha nota baixa acontecer,rsrs,alguém poderia me explicar o que é que está de errado???
#include <stdio.h> typedef struct { double *digito; }numero;
void soma(numero *bla,numero *ble,int i,int j){ numero blu; int g=0,c=1,t,z; t=i;z=j; blu.digito=calloc(1,sizeof(double)); if(i<j){ while(i>0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=bla.digito[i]+ble.digito[j]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; ble.digito[j–]=1+ble.digito[j–]; j++; } g++; i–;j–; } while(j>0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=0+ble.digito[j]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; ble.digito[j–]=1+ble.digito[j–]; j++; } g++; j–; } printf(“RESULTADO: \n”); while(g>0){ printf("%dXXX",blu.digito[g]); g–; } }else{ while(j>0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=bla.digito[i]+ble.digito[j]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; bla.digito[i–]=1+bla.digito[i–]; i++; } g++; i–;j–; } while(i>0){ blu.digito = realloc(blu.digito,(++c)*sizeof(double)); <a href="//blu.digito">//blu.digito</a>[g]=NULL; blu.digito[g]=0+bla.digito[i]; if(blu.digito[g]>9){ blu.digito[g]=blu.digito[g]-10; bla.digito[i–]=1+bla.digito[i–]; i++; } g++; i–; } printf("\n%d numeros\n",g); printf(“RESULTADO: \n”); while(g>0){ printf("%dxxx",blu.digito[g]); g–; } } }
int menu(numero *bla,numero *ble,int i,int j){ int opcao; printf("\n\nCALCULADORA ‘INFINITA’\n"); printf(“OPCOES:(digite numero correspondente)\n”); printf(“1-SOMA\n”); printf(“2-SUBTRAÇÃO\n”); printf(“3-MULTIPLICAÇÃO\n”); printf(“4-DIVISÃO\n”); printf(“5-RESTO\n”); printf(“6-SAIR\n”); scanf("%d",&opcao); if((opcao<0)||(opcao>6)){ printf(“Opção inválida”); //menu(); } switch(opcao){ case 1: soma(bla,ble,i,j); break; case 2: //subtracao(); break; case 3: //multiplicacao(); break; case 4: //divisao(); break; case 5: //resto(); break; } }
double conversor(char cho){ numero blas;int ii=0; if(cho==‘0’){ blas.digito[ii]=0; }else if(cho==‘1’){ blas.digito[ii]=1; }else if(cho==‘2’){ blas.digito[ii]=2; }else if(cho==‘3’){ blas.digito[ii]=3; }else if(cho==‘4’){ blas.digito[ii]=4; }else if(cho==‘5’){ blas.digito[ii]=5; }else if(cho==‘6’){ blas.digito[ii]=6; }else if(cho==‘7’){ blas.digito[ii]=7; }else if(cho==‘8’){ blas.digito[ii]=8; }else if(cho==‘9’){ blas.digito[ii]=9; }else{ printf(“deu merda”); } return blas.digito[ii]; }
int main(void) { char url[]=“teste.txt”; char ch; FILE *arq; numero bla,ble; int i=0,j=0,cont=0,contt=0,aux=0,auxx=0; bla.digito=calloc(1,sizeof(double)); ble.digito=calloc(1,sizeof(double));
arq = fopen(url, "r"); if(arq == NULL){ printf("Erro, nao foi possivel abrir o arquivo\n"); }else{ while( (ch=fgetc(arq))!= EOF ){ if((ch=='\n')||(ch=='\r')){ break; } putchar(ch); bla.digito = realloc(bla.digito,(++cont)*sizeof(double)); bla.digito[i]=conversor(ch); aux++; } printf("\n%d numeros\n",aux); printf("\n\n"); while( (ch=fgetc(arq))!= EOF ){ putchar(ch); ble.digito = realloc(ble.digito,(++contt)*sizeof(double)); ble.digito[j]=conversor(ch); auxx++; } printf("\n%d numeros\n",auxx); } fclose(arq); menu(bla,ble,aux,auxx); return 0;
}