Colocar numeros de precisao ilimitada numa lista encadeada
5 respostas
J
juliooliveira
preciso pegar um numero por extenso e colocar cada digito desse numero em uma lista encadeada
a solução que encontrei para isso foi fazer um ponteiro de string com alocaçao dinamica, converter cada string dentro de um laço e inserir na lista.
estou usando esse codigo mas nao esta inserindo em lista.
Qual e o erro que esta ocasionando isso?
void num_lista(Lista * l, char* cnum) {
Você está alocando espaço para apenas 1 char, isso não parece correto, ainda mais se você espera que seu string seja terminado com zero ou seja, só vai caber o \0 ali.
Outra coisa é que você está acessando os dados apontados por cnum (ao fazer *(cnum+i) != '\0') sem ter inicializado ele antes, o que também não parece correto.
J
juliooliveira
como posso resolver isso pois nao quero limitar a quantidade de strings.
sobre a inicializacao eu inicializei no int main pois a variavel cnum e passada como parametro
> int main(void){
Lista*l1=criar();Lista*l2=criar();Lista*l3=criar();char*cnum1;char*cnum2;printf("Inserir o numero: ");scanf("%s%*c",cnum1);printf("Inserir o numero: ");scanf("%s%*c",cnum2);num_lista(l1,cnum1);num_lista(l2,cnum2);//l3=adicao(l1,l2);imprimir(l1);imprimir(l2);return0;}
K
Kronal
Ta bem confuso o uso de cnum. Tu lê ele usando scanf() mas depois descarta isso dentro do num_lista() e aloca memória nova pra ele com 1 byte e sem inicializar.
O que você tem é entender direito o que você quer fazer e depois ver que funções usar pra implementar o que tu quer fazer, porque eu lendo assim não consigo entender direito nem a intenção do teu programa.
Parece que você só juntou um monte de coisas pra ver no que dava. Por isso na minha opinião, tem que esclarecer as ideias ai.
J
juliooliveira
na verdade eu leio essa variavel atraves do scanf() e a funçao num_lista() pega essa variavel para aplicar a funcao.
o que eu to querendo e que na funçao eu pegue a string com tamanho ilimitado e que cada ponteiro de string aponte para cada caractere, converta isso para inteiro e adicione numa lista.
nao era para aparecer esse um byte e sim ter um tamanho variavel de acordo com o tamanho da string que eu for passar para a funçao. essa e a minha duvida por nao sei como fazer isso.
K
Kronal
Você precisa alocar o string antes de passar para scanf(), pois scanf() só vai preencher os valores na memoria já alocada. Dai depois só colocar esse string na lista encadeada.