Ir ao conteúdo
  • Cadastre-se
Jessé P. de Melo

C Função Atoi não esta convertendo string de numeros

Recommended Posts

Boa tarde.

Sou novato em programação.

Estou recebendo o erro, da função Atoi(). Não compreendo direito o que está acontecendo.

O exercício pede: Receba 10 strings com idade e nome de pessoas, e ordenar pela idade...

Aceito outros scripts mas quero saber porque o meu não funciona e como resolvo.

Segue: 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main(void){
    char idade_nome[10][30];
    char string_op[30];
    char conversor[4];
    int variavel_op;
    int idade[10];

    // Inserindo dados
    for(int x=0;x<10;x++){
        printf("Digite idade_nome");
        scanf("%s",&idade_nome);
        fflush(stdin);
    }

    //Separando numeros para calculo
    for(int x=0;x<10;x++){
        strncpy(conversor,idade_nome[x][0],3);
        idade=atoi(conversor);  /*------------->> ONDE DA O ERRO*/
        printf("As respectivas idades sao: %i ",idade);
    }
    /* enquanto o idade atual atual for maior que a idade seguinte, pega o valor da variavel atual e coloca em uma variavel provisoria,
    a variavel atual recebe o valor da variavel seguinte, a variavel a frente recebe o valor da atual */
    for(int x=0;x<10;x++){
        while(idade[x]>idade[x+1]){
            variavel_op=idade[x];
            strcpy(string_op,idade_nome[x]);
            idade[x]=idade[x+1];
            strcpy(idade_nome[x],idade_nome[x+1]);
            idade[x+1]=variavel_op;
            strcpy(idade_nome[x+1],string_op);
        }
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aquele problema eu resolvi. Agora estou com um problema de logica... O algoritmo tem dificuldade em ordenar múltiplos numeros consecutivos. Não sei como resolver...E só consegui pegar os números com strings com o traço(-) no lugar do espaço.

Segue: 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main(void){
    char idade_nome[10][30];
    char string_op[30];
    char conversor[4];
    int variavel_op;
    int idade[10];

    // Inserindo dados
    for(int x=0;x<10;x++){
        printf("Digite idade-nome:");
        scanf("%s",&idade_nome[x][0]);
        fflush(stdin);
    }

    //Separando numeros para calculo
    for(int x=0;x<10;x++){
        strncpy(conversor,idade_nome[x],2);
        idade[x]=atoi(conversor);
    }

    /* enquanto o idade atual atual for maior que a idade seguinte, pega o valor da variavel atual e coloca em uma variavel provisoria,
    a variavel atual recebe o valor da variavel seguinte, a variavel a frente recebe o valor da atual */
    for(int x=0;x<10;x++){
        while(idade[x]>idade[x+1]){
            variavel_op=idade[x];
            strcpy(string_op,idade_nome[x]);
            idade[x]=idade[x+1];
            strcpy(idade_nome[x],idade_nome[x+1]);
            idade[x+1]=variavel_op;
            strcpy(idade_nome[x+1],string_op);
        }
    }
    for(int x=0;x<10;x++){
        printf("%s\n",idade_nome[x]);
    }

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não faço a menor ideia do que você quer com esse código.

Diz o teu programa captura o que, faz o que, e imprime o que?

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que me expressei errado. Eu quero que um programa leia 10 strings, as strings são compostas de 2 partes, uma inteira e outra de caracteres (EX: 19-Carla). Em seguida o programa vai ordenar pelo numero. E depois imprime tudo. Vou colar o enunciado aqui: 

Escreva um programa que leia a idade e o primeiro nome de 10 pessoas. Seu programa deve terminar quando uma idade negativa for digitada. Ao terminar, seu programa deve escrever o nome e a idade das pessoas mais jovens e mais velhas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é um bubble sort...Só não estou entendendo porque o while esta deixando sair antes da hora, somente o primeiro indice da string e reordenado se estiver em qualquer posição. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bubble sort seria:

 

int trocou;

do{
    trocou = 0;
    for(int x=0;x<9;x++){
        if(idade[x]>idade[x+1]){
            trocou = 1;
            variavel_op=idade[x];
            strcpy(string_op,idade_nome[x]);
            idade[x]=idade[x+1];
            strcpy(idade_nome[x],idade_nome[x+1]);
            idade[x+1]=variavel_op;
            strcpy(idade_nome[x+1],string_op);
        }
    }
}while(trocou);

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ainda pensei em fazer algo parecido com isso porém via função, só que me deu preguiça :(, eu teria que separar em funções e depois ir ligando a variável de uma função a outra. Alem do mais como não tenho muita pratica as vezes eu erro a sintaxe e tenho que ficar quebrando a cabeça com coisas simples.

 

Obrigado !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×