Ir ao conteúdo
  • Cadastre-se

C Os valores das 5 idades serão lidos em linha, separados por um espaço


Ir à solução Resolvido por AdrianoSiqueira,

Posts recomendados

Boa tarde

Estou aprendendo linguagem C e tenho de fazer um algoritmo que receba a idade de 5 pessoas e mostre mensagem informando "maior de idade" e "menor de idade" para cada pessoa e Imprimir "idade invalida" quando idade for menor que zero. Considerar a idade a partir de 18 anos como maior de idade.

Meu problema esta na entrada onde os valores das 5 idades serão lidos em linha, separados por um espaço. Não estou conseguindo em linhas separadas por espaço. eu fiz como indicado abaixo.

preciso de ajuda para resolver essa questão de ser em linha separada por espaço.

A entrada tem de ser do tipo: 12 45 22 21 -2 e saída:

menor de idade
maior de idade
maior de idade
maior de idade
idade invalida.

Desde já agradeço.

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

void main(){
    int idades[5];
    int i= 0;
    
    for(i=1; i<=5; i++){    
    scanf("%d", &idades[i]);            
	}	      
    for(i=1;i<=5;++i){      

    if(idades[i]>=18){
    printf("maior de idade \n");
	}        
    if (idades[i]>=0 && idades[i]<18){
    printf("menor de idade \n");
	}         	
    if (idades[i]<0){
    printf("idade invalida \n");
	}
    }	
    return 0;
    }

 

Link para o post
Compartilhar em outros sites
  • Solução

Você pode colocar a mensagem para o usuário, depois faça um loop com as chamadas para scanf, na primeira iteração você coloca todos os valores, o scanf fará a atribuição automaticamente (isso é um efeito colateral por causa do buffer).

 

Algo mais ou menos assim:

Spoiler

#include <stdio.h>

int main() {
    const int quantidade = 3;
    int idades[quantidade];
    
    
    printf("Digite %d idades: ", quantidade);
    
    for(int i = 0; i < quantidade; i++){
        scanf("%d", &idades[i]);
    }
    
    for(int i = 0; i < quantidade; i++){
        printf("Idade: %3d - ", idades[i]);
        
        if (idades[i] >= 18) {
            printf("maior \n");
        } else if(idades[i] >= 0) {
            printf("menor \n");
        } else {
            printf("invalido \n");
        }
    }
    
    return 0;
}

 

 

Screenshot_20210112_175043.thumb.png.7953cc661ad8f6403c34c1d7e0a34de2.png

  • Curtir 1
Link para o post
Compartilhar em outros sites
    1   #include <stdio.h>
    2   #include <stdlib.h>
    3
    4   void main(){
    5       int idades[5];
    6       int i= 0;
    7       
    8       for(i=1; i<=5; i++){    
    9       scanf("%d", &idades[i]);            
   10           }             
   11       for(i=1;i<=5;++i){      
   12
   13       if(idades[i]>=18){
   14       printf("maior de idade \n");
   15           }        
   16       if (idades[i]>=0 && idades[i]<18){
   17       printf("menor de idade \n");
   18           }         
   19       if (idades[i]<0){
   20       printf("idade invalida \n");
   21           }
   22       }
   23       return 0;
   24       }

 

Seu programa tem vários problemas ainda. Você tem um livro? Já escreveu outros programas? Tem alguma referência sobre essas funções?

 

Algumas coisas, com os números de linha

  • [2] pra que isso? não está usando nada de stdlib
  • [4][23] main() retorna um int. E você deve saber porque retornou zero na linha 23. Qual é então a razão para declarar main() como void()? Claro que vai dar erro
  • [6][11] NUNCA declare uma variável b0b1nh@ com o nome singelo 'i' como fez. Declare a variável de controle do loop DENTRO do for, como vou te mostrar nos exemplos. Assim ela deixa de existir assim que acaba o loop. Nunca faça isso. Sempre vai cair na sua cabeça.
  • [9] SEMPRE leia o retorno de scanf(). Qual o propósito de seguir se ela não ler nada? Seu programa não terá chance de dar certo. Teste. Se não leu de uma mensagem e encerre o programa. Faça o simples
  • você pode ler todos de uma vez usando scanf()
  • alinhe melhor seu programa. Como escreveu está difícil de acompanhar.
  • quando está testando se acostume a mostrar o que leu antes de achar que leu algo.
  • [10] essa chave encerra o loop for da linha 8. Aposto que não era isso que você queria...
  • alinhe melhor e vai ver que não faz muito sentido como escreveu.

Dois exemplos:

 

Citação

Leia e mostre os valores antes de seguir com o programa. É mais esperto que escrever o programa todo primeiro

#include <stdio.h>
int main(void)
{
    const char* mascara5 = "%d %d %d %d %d";
    int idade[5];

    printf("Entre com as 5 idades [separadas por ao menos um espaco]: ");
    int res = scanf( mascara5,
        &idade[0], &idade[1], &idade[2], &idade[3], &idade[4]);

    if (res != 5)
    {   printf("Nao consegui ler todas as idades\n");
        return -1;
    };

    printf("\nIdades lidas: ");
    for (int i = 0; i < 5; ++i) printf("%d ", idade[i]);
    printf("\n");
    return 0;
}
// fim

 

Ou mesmo:

 

#include <stdio.h>

int main(void)
{
    const char* mascara1 = "%d";
    int idade[5];

    printf("Entre com as 5 idades [separadas por ao menos um espaco]: ");
    for (int i = 0; i < 5; ++i)
    {
        int res = scanf(mascara1, &idade[i]);
        if (res != 1)
        {
            printf("Nao consegui ler a idade %d\n", 1 + i);
            return -1;
        };
    };

    printf("\nIdades lidas: ");
    for (int i = 0; i < 5; ++i) printf("%d ", idade[i]);
    printf("\n");

    return 0;
}
// fim

 

Que vão mostrar a mesma coisa
 

Entre com as 5 idades [separadas por ao menos um espaco]: 2 4 6 8 1

Idades lidas: 2 4 6 8 1

 

  • Curtir 1
  • Obrigado 1
Link para o post
Compartilhar em outros sites
16 horas atrás, arfneto disse:

    1   #include <stdio.h>
    2   #include <stdlib.h>
    3
    4   void main(){
    5       int idades[5];
    6       int i= 0;
    7       
    8       for(i=1; i<=5; i++){    
    9       scanf("%d", &idades[i]);            
   10           }             
   11       for(i=1;i<=5;++i){      
   12
   13       if(idades[i]>=18){
   14       printf("maior de idade \n");
   15           }        
   16       if (idades[i]>=0 && idades[i]<18){
   17       printf("menor de idade \n");
   18           }         
   19       if (idades[i]<0){
   20       printf("idade invalida \n");
   21           }
   22       }
   23       return 0;
   24       }

 

Seu programa tem vários problemas ainda. Você tem um livro? Já escreveu outros programas? Tem alguma referência sobre essas funções?

 

Algumas coisas, com os números de linha

  • [2] pra que isso? não está usando nada de stdlib
  • [4][23] main() retorna um int. E você deve saber porque retornou zero na linha 23. Qual é então a razão para declarar main() como void()? Claro que vai dar erro
  • [6][11] NUNCA declare uma variável b0b1nh@ com o nome singelo 'i' como fez. Declare a variável de controle do loop DENTRO do for, como vou te mostrar nos exemplos. Assim ela deixa de existir assim que acaba o loop. Nunca faça isso. Sempre vai cair na sua cabeça.
  • [9] SEMPRE leia o retorno de scanf(). Qual o propósito de seguir se ela não ler nada? Seu programa não terá chance de dar certo. Teste. Se não leu de uma mensagem e encerre o programa. Faça o simples
  • você pode ler todos de uma vez usando scanf()
  • alinhe melhor seu programa. Como escreveu está difícil de acompanhar.
  • quando está testando se acostume a mostrar o que leu antes de achar que leu algo.
  • [10] essa chave encerra o loop for da linha 8. Aposto que não era isso que você queria...
  • alinhe melhor e vai ver que não faz muito sentido como escreveu.

Dois exemplos:

 


#include <stdio.h>
int main(void)
{
    const char* mascara5 = "%d %d %d %d %d";
    int idade[5];

    printf("Entre com as 5 idades [separadas por ao menos um espaco]: ");
    int res = scanf( mascara5,
        &idade[0], &idade[1], &idade[2], &idade[3], &idade[4]);

    if (res != 5)
    {   printf("Nao consegui ler todas as idades\n");
        return -1;
    };

    printf("\nIdades lidas: ");
    for (int i = 0; i < 5; ++i) printf("%d ", idade[i]);
    printf("\n");
    return 0;
}
// fim

 

Ou mesmo:

 


#include <stdio.h>

int main(void)
{
    const char* mascara1 = "%d";
    int idade[5];

    printf("Entre com as 5 idades [separadas por ao menos um espaco]: ");
    for (int i = 0; i < 5; ++i)
    {
        int res = scanf(mascara1, &idade[i]);
        if (res != 1)
        {
            printf("Nao consegui ler a idade %d\n", 1 + i);
            return -1;
        };
    };

    printf("\nIdades lidas: ");
    for (int i = 0; i < 5; ++i) printf("%d ", idade[i]);
    printf("\n");

    return 0;
}
// fim

 

Que vão mostrar a mesma coisa
 


Entre com as 5 idades [separadas por ao menos um espaco]: 2 4 6 8 1

Idades lidas: 2 4 6 8 1

 

Valeu pelas dicas. Não tenho livro estou assistindo vídeos e baixando apostilas.

Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!