Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

Solucionei o problema. Aparentemente foi falta de atenção. Já posto correção !

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 !

Editado por Jessé P. de Melo

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






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

×