Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

ajuda codigo "informa q tem 44 anos :(

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

  • Font Size
    #1

    C / C++ ajuda codigo "informa q tem 44 anos :(

    Oi e ai... olha escrevi esse codigo de acordo com uma video aula !
    o msm na video aula funciona certinho !
    mas o meu nao. ele copila mas nao funciona corretamente
    nao importa a data fornecida ele vai informa q tem 44 anos

    ex.:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    #include <stdio.h>
    #include <conio.h>

    int main()

    {
    char *nome[20];
    int ano,ano_nasceu,cal;
    cal=ano_nasceu-ano;

    printf("diga sei nome:\n");
    scanf("%[^\n]",&nome);
    printf("digite o ano atual:\n");
    scanf("%d",&ano);
    printf("digite ano que nasceu:\n");
    scanf("%d",&ano_nasceu);

    printf("\n%d voce tem %d anos\n",nome,cal);

    fflush(stdin);
    getch();
    return 0;

    }
    A mesma gota de água solitária que é incapaz de regar o solo ou matar a sede é capaz de transbordar um oceano.

  • Font Size
    #2
    Postado Originalmente por X3roba Ver Post
    Oi e ai... olha escrevi esse codigo de acordo com uma video aula !
    o msm na video aula funciona certinho !
    mas o meu nao. ele copila mas nao funciona corretamente
    nao importa a data fornecida ele vai informa q tem 44 anos

    ex.:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    #include <stdio.h>
    #include <conio.h>

    int main()

    {
    char *nome[20];
    int ano,ano_nasceu,cal;
    cal=ano_nasceu-ano;

    printf("diga sei nome:\n");
    scanf("%[^\n]",&nome);
    printf("digite o ano atual:\n");
    scanf("%d",&ano);
    printf("digite ano que nasceu:\n");
    scanf("%d",&ano_nasceu);

    printf("\n%d voce tem %d anos\n",nome,cal);

    fflush(stdin);
    getch();
    return 0;

    }

    Irmão eu arrumei seu código para funcionar no linux, caso aí no windows não funcione o "getchar()" que eu coloquei, você coloca sua biblioteca "conio" denovo e coloca o "getch" no lugar do "getchar".

    O que acontece é o seguinte vou colocar seu código errado aqui e comentar nele para você ver o que está errado...

    Código:
    char *nome[20];
    int ano,ano_nasceu,cal;
    cal=ano_nasceu-ano;
    Irmão você começa errando colocando o programa para calcular duas variáveis que nem mesmo tem valores atribuídos, o programa nesse ponto já está calculando "ano_nasceu-ano" antes mesmo se você atribuir os valores a essas variáveis, e além de tudo você ainda colocou errado, pois o correto é colocar "ano-ano_nasceu" pois da forma que você colocou o resultado dá número negativo, ninguém pode ter "-44" anos...

    Código:
    printf("diga sei nome:\n");
    scanf("%[^\n]",&nome);
    Irmão eu já vi usarem esse "%[^" antes mas eu vi pouquíssimas vezes fazer uso disso e eu nem imagino para que sirva pois é muito raro encontrar um código usando esse placeholder... Talvez esse placeholder funcione no windows, mas o correto é colocar:
    Código:
    scanf("%s",&nome);
    Pois o placeholder %s que é o responsável por fazer alusão a uma string, caso contrário qualquer outro placeholder que você usar vai dar erro mesmo, pelo menos esse seu placeholder maluco deu erro aqui no linux.


    Código:
    printf("\n%d voce tem %d anos\n",nome,cal);
    Esse erro aqui foi outra falta de atenção sua, você quer chamar uma string usando um placeholder de número inteiro, o correto seria:
    Código:
    printf("\n%s voce tem %d anos\n",nome,cal)

    O código correto é esse:
    Código:
    #include <stdio.h>
    
    int main()
    
    {
    char nome[20];
    int ano,ano_nasceu,cal;
    
    printf("diga seu nome:\n");
    scanf("%s",&nome);
    printf("digite o ano atual:\n");
    scanf("%d",&ano);
    printf("digite ano que nasceu:\n");
    scanf("%d",&ano_nasceu);
    
    cal=ano-ano_nasceu;
    printf("\n%s voce tem %d anos\n",nome,cal);
    
    getchar();
    return 0;
    
    }
    Perceba que agora o cálculo "cal=ano-ano_nasceu;" está logo antes do último printf que vai chamar a variável cal, pois neste momento a variável já recebeu os valores do "ano" e "ano_nasceu" e já tem o que calcular, dessa forma não ocorrerá erros. Perceba também que dessa vez o cálculo foi escrito corretamente, o ano atual que é maior que o ano de nascimento está antes no cálculo evitando assim o aparecimento de um número negativo não esperado e não desejado.

    Eu te parabenizo por estar interessado e empenhado em estudar programação, meus parabéns! Espero que você possa continuar estudando programação pois isso é muito bom.

    Uma última dica que te dou é para usar nomes melhores para a variável, o nome da variável "ano_nasceu" além de estranho dá impressão de ser muito longo por causa do underline comparado a um nome melhor que seria "nascimento" que fica mais claro e elegante para demonstrar o propósito da variável... Lembre-se de usar sempre nomes claros e indicativos para as variáveis pois em um programa de um milhão de linhas com 15 mil variáveis é essencial que os nomes das variáveis sejam bem claros e sugestivos, já pensou você ficar perdido no programa por causa de um nome de variável mal escolhido?

    Bons estudos, qualquer dúvida pergunte...


    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
      Eis o jeito para sair o resultado correto!

      #include <stdio.h>
      #include <conio.h>

      int main()

      {
      char *nome[20];
      int ano,ano_nasceu,cal;

      printf("diga sei nome:\n");
      scanf("%[^\n]",&nome);
      printf("digite o ano atual:\n");
      scanf("%d",&ano);
      printf("digite ano que nasceu:\n");
      scanf("%d",&ano_nasceu);

      cal=ano-ano_nasceu;

      printf("\n%s voce tem %d anos\n",nome,cal);

      fflush(stdin);
      getch();
      return 0;

      }
      Três coisas:

      Você estava fazendo o cálculo de subtração antes de serem informados os valores, então o movi para baixo.

      Uma segunda coisa é que você estava exibindo o nome com um %d que deve ser usado APENAS para números inteiros, por isso na imagem estava um numero no lugar do nome..resolvi isso por substituir por %s

      E por último você estava subtraindo o ano de nascimento pelo ano atual, e isso SEMPRE vai dar negativo, porque o ano atual SEMPRE é maior que o que a pessoa nasceu (isso aqui no planeta Terra)..então inverti a posição das duas variáveis
      .

      Obs.: Com certeza você e a video aula estão fazendo diferentes, porque não tem como um código exatamente igual dar resultados diferentes, especialmente em um programa simples desse. Da uma conferida ai no video.

      Comment


      • Font Size
        #4
        Opaa... muito abrigado pela força !
        vlw deu certinho aki
        primeiros dias de estudo ainda estou meio perdido...
        vou presta mais atenção nas dicas !

        Abraço !
        A mesma gota de água solitária que é incapaz de regar o solo ou matar a sede é capaz de transbordar um oceano.

        Comment


        • Font Size
          #5
          Isso aí irmão, estude bastante, todos erramos muito mesmo é completamente normal.

          Qualquer dúvida pode perguntar que estaremos aqui para ajudá-lo, primeiro dia agora mas daqui a pouco você já vai estar programando muito!

          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
            #6
            Olá, tenho algumas considerações a fazer sobre este tópico. É uma tecla na qual bato sempre nos diversos fóruns onde participo.
            1 - Aprenda C99 que é a revisão mais recente da linguagem C.
            2 - int main(void) é o correto.
            3 - conio.h não é parte do padrão C, visite Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... link na wikipedia para ler mais um pouco.
            4 - Ao declarar uma variável, atribua-lhe um valor inicial padrão: int ano = 0, por exemplo. Você correrá menos riscos de erros e, os erros que por ventura existirem, serão mais facilmente encontrados.
            5 - Há livros muito bons para serem baixados com o bom e velho e-mule. Use-o e conseguirá o material adequado.
            6 - Use compiladores modernos e suas IDE's. Podem lhe ajudar muito os seguintes:
            • Linux: gcc e como IDE Codeblocks.
            • Windows: Mingw32(ou MIngw64 para 64 bits) e Codeblocks ou PellesC. Vão ajudar muito.


            Se você quer aprender a programar, oriento a usar uma IDE SIM. Sem essa de usar VI ou VIM,
            para aprender tudo "de verdade" ou como era antigamente. Isso é apenas perda de tempo.
            Além do mais, com seu aprofundar nos estudos, aprenderá a usar o make e outros utilitários através de um caminho menos doloroso. Para aprender os fundamentos da linguagem C, você gastará um ou dois meses, acredite-me... Para dominá-la já gastará bem mais tempo. Pergunte sempre, busque mais fontes de estudo e siga em frente. Posso dizer que vale bem o esforço.

            Um forte abraço,

            Bonding

            Comment


            • Font Size
              #7
              Código:
              printf("diga sei nome:\n");
              scanf("%[^\n]",&nome);
              Irmão eu já vi usarem esse "%[^" antes mas eu vi pouquíssimas vezes fazer uso disso e eu nem imagino para que sirva pois é muito raro encontrar um código usando esse placeholder... Talvez esse placeholder funcione no windows, mas o correto é colocar:
              Código:
              scanf("%s",&nome);
              Pois o placeholder %s que é o responsável por fazer alusão a uma string, caso contrário qualquer outro placeholder que você usar vai dar erro mesmo, pelo menos esse seu placeholder maluco deu erro aqui no linux.
              Então irmão, vi aqui que esse seu placeholder funciona sim e pode ser usado, o problema é que você escreveu ele errado, você escreveu:
              Código:
              scanf("%[^\n]",&nome);
              quando o correto seria:
              Código:
              scanf("%[^\n]s",&nome);
              Esse placeholder serve para que o scanf possa ler os espaços como no caso do usuário digitar nome e sobrenome, sem o placeholder ele não leria os espaços e armazenaria só o nome na variável...

              Bons estudos, desculpe pelo erro de falar que você estava errado, você escreveu o placeholder errado mas você pode usá-lo sim e ele é até bom, vou começar a usá-lo direto agora...

              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
                #8
                Postado Originalmente por Bonding Ver Post
                Olá, tenho algumas considerações a fazer sobre este tópico. É uma tecla na qual bato sempre nos diversos fóruns onde participo.
                Então irmão, assim como você fez algumas considerações, eu também vou fazer algumas considerações em cima das suas pois não concordo com todas elas...


                1 - Aprenda C99 que é a revisão mais recente da linguagem C.
                Concordo com você, mas é meio óbvio isso, a grande maioria das apostilas e livros hoje em dia já ensinam o C99, que está em vigor desde 1999, provavelmente ele não está lendo um livro mais antigo do que algum de 1999.


                2 - int main(void) é o correto.
                Aqui concordo com você, eu sempre uso int main(void).


                3 - conio.h não é parte do padrão C, visite Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... link na wikipedia para ler mais um pouco.
                Então irmão, não é mas ele chamou a conio pois usaria um comando da conio que é o getch que de fato é um ótimo comando... Se ele programa para windows como ele faz não há mal que ele chame a conio para ter acesso ao getch (entre outros comandos) que são comandos muito bons...


                4 - Ao declarar uma variável, atribua-lhe um valor inicial padrão: int ano = 0, por exemplo. Você correrá menos riscos de erros e, os erros que por ventura existirem, serão mais facilmente encontrados.
                Aqui eu não concordo, nem sempre atribuo valores iniciais para as minhas variáveis e nunca tive grandes problemas com isso, é só prestar a atenção no uso que você faz das variáveis, não apóio essa dica.


                6 - Use compiladores modernos e suas IDE's. Podem lhe ajudar muito os seguintes:
                • Linux: gcc e como IDE Codeblocks.
                • Windows: Mingw32(ou MIngw64 para 64 bits) e Codeblocks ou PellesC. Vão ajudar muito.


                Se você quer aprender a programar, oriento a usar uma IDE SIM. Sem essa de usar VI ou VIM,
                para aprender tudo "de verdade" ou como era antigamente. Isso é apenas perda de tempo.
                Aqui definitivamente eu não concordo, se você gosta de usar IDE e quer dar a dica para o cara usar tudo bem, cada um tem um gosto e talvez ele experimente o uso de IDE's e goste, mas vir aqui e falar que é perda de tempo já é sacanagem. Eu não uso IDE, acho uma porcaria e programo usando o VI e o VIM direto, qual o problema nisso?
                Perda de tempo é você vir aqui para fazer um comentário capcioso e preconceituoso desses.

                Cada um programa como achar melhor, se o cara quiser usar IDE que use, se quiser usar o VI que use, de maneira alguma é perda de tempo uma opção ou outra, você poderia ter evitado esse comentário.

                De qualquer forma bons estudos para os dois, para dominar uma linguagem demora um pouquinho mesmo e realmente vale a pena cada segundo de estudo.


                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
                  #9
                  Bom posso ter expressado mal algumas opiniões, mas precisamos considerar o seguinte:
                  Citação:
                  1 - Aprenda C99 que é a revisão mais recente da linguagem C.
                  Concordo com você, mas é meio óbvio isso, a grande maioria das apostilas e livros hoje em dia já ensinam o C99, que está em vigor desde 1999, provavelmente ele não está lendo um livro mais antigo do que algum de 1999.
                  Não, não é meio óbvio e nem é óbvio. Para quem aprende um novo assunto nada é óbvio, infelizmente. Quando aprendi C não tive alguém para me falar isso e ao programar para um trabalho (tinha que ser C) o mesmo foi rejeitado única e exclusivamente por esse detalhe. Neste fórum há link de cursos que não estão no padrão C99.

                  Citação:
                  4 - Ao declarar uma variável, atribua-lhe um valor inicial padrão: int ano = 0, por exemplo. Você correrá menos riscos de erros e, os erros que por ventura existirem, serão mais facilmente encontrados.
                  Aqui eu não concordo, nem sempre atribuo valores iniciais para as minhas variáveis e nunca tive grandes problemas com isso, é só prestar a atenção no uso que você faz das variáveis, não apóio essa dica.
                  Bom, aprendi a fazer isso com as referências que eu li sobre C e em outras linguagens também. Alias, um dos erros no programa apresentado neste tópico foi gerado por isso, ao realizar uma subtração entre valores não estabelecidos.

                  Código:
                  char *nome[20];
                  int ano,ano_nasceu,cal;
                  cal=ano_nasceu-ano;
                  No trabalho sempre fizemos isso e o processo de encontrar erros sempre foi mais fácil. Difícil era convencer os programadores a adotarem essa prática. Enquanto isso os erros eram mais difíceis de serem depurados. Gostaria de lembrar que não é uma técnica à prova de falhas e que evitará todos os erros dos seus programas. Certamente ele não evita o erro lógico mostrado aqui, mas creio que sua depuração seria mais fácil.

                  Citação:
                  6 - Use compiladores modernos e suas IDE's. Podem lhe ajudar muito os seguintes:

                  Linux: gcc e como IDE Codeblocks.
                  Windows: Mingw32(ou MIngw64 para 64 bits) e Codeblocks ou PellesC. Vão ajudar muito.


                  Se você quer aprender a programar, oriento a usar uma IDE SIM. Sem essa de usar VI ou VIM,
                  para aprender tudo "de verdade" ou como era antigamente. Isso é apenas perda de tempo.
                  Aqui definitivamente eu não concordo, se você gosta de usar IDE e quer dar a dica para o cara usar tudo bem, cada um tem um gosto e talvez ele experimente o uso de IDE's e goste, mas vir aqui e falar que é perda de tempo já é sacanagem. Eu não uso IDE, acho uma porcaria e programo usando o VI e o VIM direto, qual o problema nisso?
                  Perda de tempo é você vir aqui para fazer um comentário capcioso e preconceituoso desses.

                  Cada um programa como achar melhor, se o cara quiser usar IDE que use, se quiser usar o VI que use, de maneira alguma é perda de tempo uma opção ou outra, você poderia ter evitado esse comentário.
                  Não tem problema nenhum em usar ou não IDE. E eu nem quis ser rude com alguém como o colega foi comigo. Eu mesmo gosto muito do VI e aprendi a usá-lo muito antes de usar uma interface gráfica num micro, mas para programar prefiro os auxílios que uma IDE podem me oferecer, porque no meu caso, o tempo de produção conta. Realizamos um estudo em três locais diferentes, com programadores diferentes e optamos por usar as IDE's devido ao aproveitamento do tempo que proporcionaram para nossas necessidades. Não creio que se trate de um comentário preconceituoso e capcioso. Talvez eu tenha me expressado mal e peço desculpas se ofendi alguém.

                  Dominar a linguagem C leva tempo e toda dica é sempre bem vinda.

                  Comment


                  • Font Size
                    #10
                    Irmão eu não fui rude, você comentou e eu respondi, o fato de eu não concordar com um ponto de vista seu não me torna rude.

                    Você não me ofendeu, e se eu te ofendi te peço desculpas pois não foi minha intençã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
                      #11
                      Use constantes em conjunto com fgets para proteção de estouro do buffer.
                      Código:
                      #define MAX 40
                      
                      ...
                      char nome[MAX];
                      
                      puts("Digite seu nome: ");
                      fgets(nome,MAX,stdin);
                      ..
                      fgets vai limitar a quantidade de caracteres da array, sendo que stdin é uma stream de entrada.. teclado.

                      E da pra cortar algumas variáveis ai, você pode imprimir diretamente o resultado sem precisar de uma variável auxiliar para guardar o resultado.
                      O C vai resolver a expressão e mostrá-la.
                      Código:
                      printf("%s voc\x88 tem %d anos",nome,(ano-ano_nascimento))
                      []'s

                      Comment

                      X
                      Working...
                      X