Enviado em 05/05/2017 - 12:27h
Boa tarde pessoal, estou fazendo um programa em C para uma matéria da faculdade, porém este está travando em um ponto da execução. Basicamente, é um programa para somar inteiros muito grandes, utilizando a estrutura de dados Lista. O que eu preciso fazer é ler um número inteiro gigante através de uma string e passar este para a Lista, sendo que cada célula da minha lista só pode conter no máximo 5 algarismos. Por exemplo, o número 1234567898765 na lista ficaria 123 -> 45678 -> 98765.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct c{
int dado;
struct c *prox;
} cel;
typedef struct{
cel *inicio;
cel *fim;
int quantidade;
} Lista;
void inicializa(Lista *lista);
void insereInicio(Lista *lista, int dado);
void imprimeLista(Lista lista);
void stringToLista(char *string, Lista *lista);
int main(){
char string[100];
Lista L1, L2, LS;
inicializa(&L1);
printf("Soma de Numeros Absurdamente Grandes\n\n");
printf("Primeiro numero -> ");
fgets(string, 100, stdin);
fflush(stdin);
// AQUI É ONDE TRAVA
stringToLista(string, &L1);
imprimeLista(L1);
return 0;
}
void inicializa(Lista *lista){
lista->inicio = NULL;
lista->fim = NULL;
lista->quantidade = 0;
}
void insereInicio(Lista *lista, int dado){
cel *novo = (cel*)malloc(sizeof(cel));
if(novo == NULL) return;
novo->dado = dado;
if(lista->quantidade){
novo->prox = lista->inicio;
lista->inicio = novo;
} else{
lista->inicio = novo;
lista->fim = novo;
novo->prox = NULL;
}
lista->quantidade++;
}
void imprimeLista(Lista lista){
cel *aux = lista.inicio;
if(lista.quantidade){
while(aux != NULL){
printf("%d ", aux->dado);
aux = aux->prox;
}
}
}
void stringToLista(char *string, Lista *lista){
int i, j = 0;
char aux[6];
printf("Entrou na funcao");
for(i = strlen(string); i != 0; i--){
aux[4-j] = string[i-1];
if(j == 4){
j = 0;
insereInicio(lista, atoi(aux));
} else j++;
if(i == 1 && j != 0){
while(j <= 4)
aux[4-j] = '0';
insereInicio(lista, atoi(aux));
}
}
}