Ir ao conteúdo
  • Cadastre-se
caramassada

RESOLVIDO como pegar uma sequencia de numeros do teclado em c (sem pedir quantos numeros a pessoa deseja escrever)?

Recommended Posts

Como pegar uma sequencia de numeros, e colocalos numa lista ou em um array por exemplo, (sem perguntar para o usuario quantos numeros deveram ser pegos e fazer aquele for até a quantidade de numeros)?

eu queria um comando pra pegar os numeros, delimitados por espaço..

 

ex: 

o usuario digita: 5 16 10 9 8 5 12.

eu colho: aux[]: {5,16,10,9,8,5,12} por exemplo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É possível fazer isso com alocação dinâmica de memória.

Comandos:
malloc() // Alocação de memória
realloc() // Realocação de memória (tratar o retorno, pois será uma nova posição de memória)
free() // Liberação de memória

A variável precisa ser um ponteiro para ponteiro. Onde o primeiro ponteiro possuirá a referência para o índice e o segundo a referência para o número recebido.
Exemplo:

unsigned int **vetor = NULL;// Adicionando o primeiro valorvetor = malloc( sizeof(unsigned int *) ); // Aloca a primeira posição do índicevetor[0] = malloc( sizeof(unsigned int) ); // Aloca memória para guardar o valor inteiro na primeira posiçãovetor[0] = 123;// Adicionando o segundo valorvetor = realloc( vetor, sizeof(unsigned int *) * 2 ); // Realoca a estrutura de índice, acrescentando mais uma posiçãovetor[1] = malloc( sizeof(unsigned int) ); // Aloca memória para a segunda posição do vetorvetor[1] = 234;// Liberando memória referente aos valores inseridosfree(vetor[1]); // Libera memória referente a segunda posição do vetorfree(vetor[0]); // Libera memória referente a primeira posição do vetor// Liberando memória referente ao índicefree(vetor); // Libera a memória referente ao índice

Dessa forma, é possível aumentar ou reduzir o espaço disponível para as informações entrantes do usuário.

Att.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo @ScreenBlack, não era bem o q eu estava me referindo. Veja, eu quero pegar dados do teclado e ir alocando em um array por exemplo de forma que o usuario digite de forma continua os numeros. separados apenas por espaço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se entendi direito, daria pra fazer utilizando um buffer de entrada (um vetor de char) para armazenar o conteúdo digitado pelo usuário e a partir daí tratar o conteúdo, convertendo-os para inteiro e alocando em posições de um vetor também de inteiros.

 

Mesmo usando essa solução, ainda existiria o limite de entrada, que seria o tamanho dos vetores.

Se desejar que o usuário possa entrar com conteúdos sem limites pré-definidos, precisará da alocação dinâmica de memória.

 

OBS: Se for utilizar essa solução, vale lembrar que, carácter numérico é diferente de valor numérico. Por isso há a necessidade da conversão char to int.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite @ScreenBlack , é isso q eu quero, eu quero pegar dados do teclado de forma que o usuario fique digitando e após uma entrada como: enter ou -1 ele pare de ler do teclado.

A alocacao desses numeros iria ser feita sim de forma dinamica (em uma fila utilizando malloc).


eu to fazendo assim mas nao ta muito certo nao... 

 

scanf("%d ",&aux);
    while(aux!=-1){
        principal = insere(principal,aux);
        scanf("%d ",&aux);
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

@caramassada

 

 

Tente remover aquele espaço que você adicionou na string "%d ". O espaço já e o delimitador padrão para o especificador %d e você não precisa se preocupar. Ao inserir, por exemplo, uma sequência: 32 43 12 199 43 -62 -1, você deverá conseguir fazer a leitura de cada um desses valores.

 

 

Querendo uma coisa mais sofisticada, só vejo mesmo com a leitura de uma string para tratamento posterior.

 

 

 

[ ]'

LNW

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que removendo o espaço resolva.

 

Outra alternativa é colocar a inserção dentro de um loop infinito,

    for(;{        scanf("%d",&i);        if(i == -1) break;        novo = (LISTA*)malloc(sizeof(LISTA));        novo->num = i;        novo->prox = lista;        lista = novo;    }
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×