Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Preciso de ajuda!

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Preciso de ajuda!

    Olá, sou iniciante em linguagem C e preciso fazer um algoritmo do seguinte modo.

    1-Criar um algoritmo em C que leia o nome, idade e sexo de uma pessoa. Se a pessoa for do sexo masculino e tiver a idade de 18 anos ou mais, ela é considerada maior de idade, caso a pessoa seja do sexo feminino e tiver idade de 21 anos ou mais, essa pessoa também é considerada maior de idade.

    Como eu disse anteriormente, sou iniciante em C, consegui desenvolver um algoritmo, mas não deu certo D:

    Sei que tem coisa errada no código, por favor me ajudem a resolver.

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

    main () {

    char nome[30], sexo[2];
    int idade;

    printf("Digite seu nome: ");
    scanf("%s", &nome);
    printf("\nDigite sua idade: ");
    scanf("%d", &idade);
    printf("\nQual o seu sexo? Masculino(M) Feminino (F).");
    scanf("%s", &sexo);

    if ((idade>=18) && (sexo=='M')) {
    printf("Maior");
    system("pause");
    }
    if ((idade>=21) && (sexo=='F')) {
    printf("Maior");
    system("pause");
    }
    else {
    printf("Menor");
    system("pause");
    }

    system("exit");
    }
    Similar Threads

  • Font Size
    #2
    Irmão muito bizarro, já tentei de várias formas usando vários tipos de estrutura diferentes, ainda estou tentando aqui e até agora nada... Vamos ver aqui, já vi isso acontecer em python também...

    Já conseguiu uma solução?

    Shalom!
    sigpic
    Eis que estou à porta, e bato; se alguém ouvir a minha voz, e abrir a porta,
    entrarei em sua casa, e com ele cearei, e ele comigo. (Apocalipse 3:20)

    https://twitter.com/jackads
    http://www.facebook.com/jackson.beneteferreira

    Comment


    • Font Size
      #3
      Irmão, pelo menos aqui por algum motivo que ainda não descobri por que, se inverter a estrutura de decisão funciona, por exemplo colocar:

      if((strcmp(sexo,"m")) && (idade>=21))
      printf("Maior de idade.");

      else if((strcmp(sexo,"f")) && (idade>=18))
      printf("Maior de idade.");
      ao invés do correto que seria:

      if((strcmp(sexo,"f")) && (idade>=21))
      printf("Maior de idade.");

      else if((strcmp(sexo,"m")) && (idade>=18))
      printf("Maior de idade.");
      Testa o código aí para ver se vai, mas coloque os system("PAUSE") aí onde quiser...

      Código:
      #include <stdio.h>
      
      void main(void)
      {
      int idade;
      char sexo[2], nome[20];
      
      printf("Digite o seu nome: ");
      scanf("%s", &nome);
      printf("\nDigite o seu sexo (m/f): ");
      scanf("%s", &sexo);
      printf("Digite a sua idade: ");
      scanf("%d", &idade);
      
      if((strcmp(sexo,"m")) && (idade>=21))
      printf("Maior de idade.");
      
      else if((strcmp(sexo,"f")) && (idade>=18))
      printf("Maior de idade.");
      
      else
      printf("Menor de idade.");
      }
      Vou perguntar para o meu professor amanhã o porque disso...

      Shalom!
      sigpic
      Eis que estou à porta, e bato; se alguém ouvir a minha voz, e abrir a porta,
      entrarei em sua casa, e com ele cearei, e ele comigo. (Apocalipse 3:20)

      https://twitter.com/jackads
      http://www.facebook.com/jackson.beneteferreira

      Comment


      • Font Size
        #4
        Irmão, pelo menos aqui por algum motivo que ainda não descobri por que, se inverter a estrutura de decisão funciona, por exemplo colocar:
        if((strcmp(sexo,"m")) && (idade>=21))
        printf("Maior de idade.");

        else if((strcmp(sexo,"f")) && (idade>=18))
        printf("Maior de idade.");
        jackads, é bem simples, o teu if tá avaliando a função strcmp como verdadeiro(retornou um numero maior que 0, que ocorre quando as strings sao diferentes) . Para avaliar corretamente você teria que fazer isso :


        if((!strcmp(sexo,"f")) && (idade>=21))
        printf("Maior de idade.");

        else if((!strcmp(sexo,"m")) && (idade>=18))
        printf("Maior de idade.");

        Comment


        • Font Size
          #5
          Olá, aqui vai o que achei no código. Marquei em vermelho alguns pontos.

          Código:
          #include <stdio.h>
          #include <stdlib.h>
          
          main () {
          
          char nome[30], sexo[2];
          int idade;
          
          printf("Digite seu nome: ");
          scanf("%s", &nome); /* Para ler um array com scanf, você não precisa usar & */
          printf("\nDigite sua idade: ");
          scanf("%d", &idade);
          printf("\nQual o seu sexo? Masculino(M) Feminino (F).");
          scanf("%s", &sexo);
          
          /* A sequencia esta com uma falha lógica... */
          if ((idade>=18) && (sexo=='M')) {
          printf("Maior");
          system("pause");
          }
          if ((idade>=21) && (sexo=='F')) {
          printf("Maior");
          system("pause");
          }
          /* Este else corresponde somente ao último if. Não faz parte das duas comparações. */
          else {
          printf("Menor");
          system("pause");
          }
          
          system("exit");
          }
          Para seu código funcionar como deseja você pode declarar a variável sexo como char simples, não precisa ser um array. Se for declarada como array, você deverá comparar o array inteiro com strcmp. Além de que o uso da função scanf tem várias peculiaridades.
          Na sua estrutura de if..else existia um erro, que o indivíduo somente seria declarado como menor se fosse do sexo feminino.
          Tomei a liberdade de refazer essas partes para você com alguns comentários no código.
          Código:
          #include <stdio.h>
          #include <stdlib.h>
          /* para a função toupper() que retorna o
             caractere a ela enviado, porém, na forma maiúscula.*/
          #include <ctype.h>
          
          int main ( void )
          {
              /* Gosto de iniciallizar as variáveis que uso
                 isso fica a critério do programador         */
              char nome[30] = {'\0' } ;
              char sexo = ' ';
              int idade = 0;
          
              printf ( "Digite seu nome: " );
              scanf ( "%s", nome );
          
              printf ( "\nDigite sua idade: " );
              scanf ( "%d", &idade );
              /* Quando scanf é usado para ler inteiros com
                %d todos os caracteres não inteiros retornam
                para a fila de leitura. Isso significa que o 'enter'
                digitado após o número será a entrada da variável
                sexo a seguir. Isso causaria um erro. Sendo assim,
                usamos getchar() para remover esse 'enter' da fila
                e ficarmos tranquilos com a entrada de valores. */
          
              getchar();
          
              printf ( "\nQual o seu sexo? Masculino(M) Feminino (F)." );
              scanf ( "%c", &sexo );
          
          
              if ( ( idade >= 18 ) && ( toupper ( sexo ) == 'M' ) )
              {
                  printf ( "Maior\n" );
              }
              else if ( ( idade >= 21 ) && ( toupper ( sexo ) == 'F' ) )
              {
                  printf ( "Maior\n" );
              }
          
              else
              {
                  printf ( "Menor\n" );
              }
          
              /* Dispensa o uso de system("pause") e
                 system("exit")   */
              printf ( "Pressione enter para encerrar...\n" );
              return 0;
          }
          Quando tiver tempo recomendo a leitura do livro C Primer Plus de Stephen Prata. É um livro de
          compreensão simples e bem estruturado.

          Espero ter ajudado.

          Comment


          • Font Size
            #6
            Olá, aqui vai o que achei no código. Marquei em vermelho alguns pontos.

            Código:
            #include <stdio.h>
            #include <stdlib.h>
            
            main () {
            
            char nome[30], sexo[2];
            int idade;
            
            printf("Digite seu nome: ");
            scanf("%s", &nome); /* Para ler um array com scanf, você não precisa usar & */
            printf("\nDigite sua idade: ");
            scanf("%d", &idade);
            printf("\nQual o seu sexo? Masculino(M) Feminino (F).");
            scanf("%s", &sexo);
            
            /* A sequencia esta com uma falha lógica... */
            if ((idade>=18) && (sexo=='M')) {
            printf("Maior");
            system("pause");
            }
            if ((idade>=21) && (sexo=='F')) {
            printf("Maior");
            system("pause");
            }
            /* Este else corresponde somente ao último if. Não faz parte das duas comparações. */
            else {
            printf("Menor");
            system("pause");
            }
            
            system("exit");
            }
            Para seu código funcionar como deseja você pode declarar a variável sexo como char simples, não precisa ser um array. Se for declarada como array, você deverá comparar o array inteiro com strcmp. Além de que o uso da função scanf tem várias peculiaridades.
            Na sua estrutura de if..else existia um erro, que o indivíduo somente seria declarado como menor se fosse do sexo feminino.
            Tomei a liberdade de refazer essas partes para você com alguns comentários no código.
            Código:
            #include <stdio.h>
            #include <stdlib.h>
            /* para a função toupper() que retorna o
               caractere a ela enviado, porém, na forma maiúscula.*/
            #include <ctype.h>
            
            int main ( void )
            {
                /* Gosto de iniciallizar as variáveis que uso
                   isso fica a critério do programador         */
                char nome[30] = {'\0' } ;
                char sexo = ' ';
                int idade = 0;
            
                printf ( "Digite seu nome: " );
                scanf ( "%s", nome );
            
                printf ( "\nDigite sua idade: " );
                scanf ( "%d", &idade );
                /* Quando scanf é usado para ler inteiros com
                  %d todos os caracteres não inteiros retornam
                  para a fila de leitura. Isso significa que o 'enter'
                  digitado após o número será a entrada da variável
                  sexo a seguir. Isso causaria um erro. Sendo assim,
                  usamos getchar() para remover esse 'enter' da fila
                  e ficarmos tranquilos com a entrada de valores. */
            
                getchar();
            
                printf ( "\nQual o seu sexo? Masculino(M) Feminino (F)." );
                scanf ( "%c", &sexo );
            
            
                if ( ( idade >= 18 ) && ( toupper ( sexo ) == 'M' ) )
                {
                    printf ( "Maior\n" );
                }
                else if ( ( idade >= 21 ) && ( toupper ( sexo ) == 'F' ) )
                {
                    printf ( "Maior\n" );
                }
            
                else
                {
                    printf ( "Menor\n" );
                }
            
                /* Dispensa o uso de system("pause") e
                   system("exit")   */
                printf ( "Pressione enter para encerrar...\n" );
                return 0;
            }
            Quando tiver tempo recomendo a leitura do livro C Primer Plus de Stephen Prata. É um livro de
            compreensão simples e bem estruturado.

            Espero ter ajudado.

            Comment

            X
            Working...
            X