1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

duvida Programa em C

Discussão em 'Programação' iniciada por NightWalkerNS, 2 de Abril de 2009. (Respostas: 14; Visualizações: 1071)

  1. Boas

    tenho que realizar um programa em C que aceita um numero ou um carácter e depois reenvia o mesmo numero/carácter 20 vezes, o problema é que não consigo introduzir nem o numero nem o carácter, já procurei por todo o lado e não encontro solução.
    PHP:
    /* Repetir 20 vezes */ 
    #include <stdio.h>
    main ()
    {
    int Aei;
    char BCnumeroletra;
     
    printf ("deseja digitar uma letra ou um numero?\n");
    scanf("%c", &);
     
    if (
    numero)
    {
    printf ("introduza o numero.\n");
    scanf ("%d", &A);
     
     
    for (
    i=1;i<=20;i=i+1)
    {
    printf("O numero introduzido foi %d. \n"A);
    }
    }
     
    else
    {
    printf ("introduza letra.\n");
    scanf ("%c", &B);
     
     
    for (
    e=1;e<=20;e=e+1)
    {
    printf("A letra introduzida foi %c. \n"B);
    }

    return(
    0);
     
    }
    Alguem poderia me explicar como fazer ele funcionar, nao quero que me faxam o programa, quero aprender, é com os erros que aprendemos certo? :D

    Muito obrigado deste ja
     
    Última edição pelo moderador: 2 de Abril de 2009
  2. AliFromCairo

    AliFromCairo Power Member

    Boas, alguns problemas mais evidentes:

    * Para efectuares uma comparação, necessitas de utilizar o operador ==, ao invés de = (que é o operador de atribuição).
    * Na comparação que fazes, estás a comparar o carácter que leste com a variável numero, que é uma varíavel à qual ainda não atribuiste nenhum valor. O que deves fazer é reformulares a tua pergunta para algo do género: "Deseja introduzir um carácter ou um dígito? Para carácter, escreva 'c'. Para dígito escreva 'd'.". Em seguida, a comparação que deves fazer é entre o carácter lido e as diferentes hipóteses (e.g. if (C == 'c') { /* código ... */ }).

    Qualquer dúvida, coloca aqui.

    Espero que ajude.
     
  3. desculpa mais uma vez, fiz as mudanças como falaste so que agora tenho outro problema que é...

    PHP:
    /* Repetir 20 vezes */ 
    #include <stdio.h>
    main ()
    {
     
    int Aeid;
     
    char BCc;
     
     
    printf ("Deseja introduzir um caracter ou um digito? \n");
     
    printf ("Para caracter, escreva 'c'. Para digito escreva 'd'. \n");
     
    scanf("%c", &);
     
        if (
    == 'd')
          {
           
    printf ("introduza o numero.\n");
           
    scanf ("%d", &A);
          
              {   
               for (
    i=1;i<=20;i=i+1)
                 {
                    
    printf("O numero introduzido foi %d. \n"A);
                 }
          }
     
        if (
    == 'c')
          {
           
    printf ("introduza letra.\n");
           
    scanf ("%c", &B);
          
                 
               for (
    e=1;e<=20;e=e+1)
                  {
                    
    printf("A letra introduzida foi %c. \n"B);
                  }
          }      

                
    }
    ok sempre que ponho a tecla 'd' que é numero ele pede-me faz a pergunta de introduzir o numero, como é pedido, mas ja no caso da letra 'c' ele não o faz, apenas repete 20 vezes (eu acho) uma mensagem que nao consigo ler porque ele fecha logo, o mesmo acontece no 'd' quando eu introduzo o numero.

    Peço deste ja desculpa pela ignorancia, é que acabei de sair do Pascal e tou no C a uns 3 dias, e visto que foram 3 dias so de falar quando vem a programaçao ficamos um pouco "cegos", igual ao pascal mas tao diferente :007:

    Muito obrigado
     
  4. ok ja consegui muito obrigado AliFromCairo ajudasteme imenso:001:
     
  5. Zibyte

    Zibyte Power Member

    PHP:
    main ()
    {
    int i;
    char C;
     
    printf ("deseja digitar uma letra ou um numero?\n");
    scanf("%c", &);
     
    for(
    i=0;i<20;i++)
    printf("A %i vez do digitado: %c\n",i+1,C);
     
    system("pause");
     

     
     
    olha que catito e que simples!!! acorda pra vida!!
     
    Última edição pelo moderador: 4 de Abril de 2009
  6. Bom como falei estou a aprender C a muito pouco tempo é claro que ainda não sei muita coisa, não é por seres "expert" que tens que ser assim e segundo esse programa que fizeste tem nada a ver com aquele que pedi -_-

    acorda pa vida -_-

    mas agradeço a tua ajuda, não julgues mal
     
  7. Zibyte

    Zibyte Power Member

    PHP:
    main ()
    {
    int i;
    char C[100];
     
    printf ("deseja digitar uma letra ou um numero?\n");
    gets();
     
    for(
    i=0;i<20;i++)
    printf("A %i vez do digitado: %s\n",i+1,C);
     
    system("pause");
     


    este utiliza uma string de 100caracteres, assim podes meter uma frase.
     
    Última edição pelo moderador: 4 de Abril de 2009
  8. XeniX

    XeniX Power Member

    Este código faz exactamente o que tu queres:
    Código:
    #include <stdio.h>
    main ()
    {
    int escolha, n, i;
    char c;
    printf ("Deseja introduzir um caracter ou um numero? \n");
    printf ("Para caracter, escreva '1'. Para numero escreva '2': ");
    scanf("%d", &escolha );
    
    switch (escolha)
    {
    case 1:
         printf ("\nEscreva a letra que pretende replicar: ");
         fflush(stdin);                                                  //limpa o buffer do teclado.
         scanf("%c", &c );
         for (i=0;i<20;i++)
         {
          printf("\n%d.A letra introduzida foi %c\n",i,c);
         }
          break;
            
    case 2:
          printf ("\nEscreva o numero que pretende replicar: ");
          scanf("%d", &n );
          for (i=0;i<20;i++)
          {
          printf("\n%d.O numero introduzido foi %d. \n",i,n);
          }
          break;
          }
    
    system("pause");    //em alternativa ao system("pause") podes usar estes dois abaixo:
    //fflush(stdin);
    //getchar();
    }
     
    Última edição: 4 de Abril de 2009
  9. Mach4_PT

    Mach4_PT Power Member

    Código:
    int main ()
    {
    int i;
    char c;
    
    printf("Introduza um numero ou caracter\n");
    scanf("%c",c);
    
    if(c>='0' && c<='9')
    {
    for(i=0;i<20;i++)
    {
    printf("O numero inserido foi %c",c);
    }
    }
    else
    {
    for(i=0;i<20;i++)
    {
    printf("O caracter inserido foi %c",c);
    }
    }
    
    }
    
     
  10. AliFromCairo

    AliFromCairo Power Member

    Sinceramente, é difícil perceber qual o objectivo de determinadas participações nesta thread, ainda para mais quando o autor da mesma já conseguiu resolver o seu problema. Participações que, na minha opinião, têm como único objectivo o show off sem qualquer tipo de comentários, creio que acabam por se revelar sem utilidade prática para o autor da thread. Como se não bastasse, algumas delas estão carregadas de erros, o que pode não ser benéfico para o autor da thread que ainda se está a iniciar na linguagem.

    Tomemos como exemplo o post anterior, onde não há qualquer tentativa de explicar ao autor da thread o que está a tentar fazer. Adicionalmente, contém uma parafernália de erros:

    Código:
    int main ()
    {
    int i;
    char c;
    
    printf("Introduza um n[COLOR=Red]u[/COLOR]mero ou car[COLOR=Red]a[/COLOR]cter\n");
    scanf("%c",c); [COLOR=Red]=> [I]Segmentation Fault[/I], o correcto seria scanf("%c", [B]&[/B]c);[/COLOR]
    
    if(c>='0' && c<='9') [COLOR=Red]=> O objectivo é ler um número, não necessariamente um único dígito.[/COLOR]
    {
    for(i=0;i<20;i++)
    {
    printf("O [COLOR=White]n[COLOR=Red]u[/COLOR]mero [/COLOR]inserido foi %c",c); [COLOR=Red]=> No seguimento do comentário anterior, ao ler o número como [/COLOR][FONT=Courier New][COLOR=Red]char[/COLOR][/FONT][COLOR=Red], estás obviamente a limitar o programa à leitura de um único dígito, quando o objectivo era ler um número inteiro, como por exemplo, -2020 ou +2020.[/COLOR]
    }
    }
    else
    {
    for(i=0;i<20;i++)
    {
    printf("O [COLOR=White]car[COLOR=Red]a[/COLOR]cter [/COLOR]inserido foi %c",c); [COLOR=Red]=> Ao não colocares um carácter separador (e.g. '\n') entre as chamadas à função [/COLOR][FONT=Courier New][COLOR=Red]printf[/COLOR][/FONT][COLOR=Red], o resultado vai ser o amalgamento das frases.[/COLOR]
    }
    }
    [COLOR=Red]=> Função [I]non-void[/I] sem qualquer [/COLOR][FONT=Courier New][COLOR=Red]return[/COLOR][/FONT][COLOR=Red].[/COLOR]
    }
    
    Com isto, não quero de forma alguma sugerir que não se devem colocar mais sugestões a partir do momento em que o autor resolveu o problema; não é isso que está em causa. Mas, no meu prisma, penso que para tal não é necessário recorrer ao pedantismo. E tendo em conta que o autor se está a iniciar, e não pediu para resolverem o problema por ele, creio que as sugestões deveriam ter algum suporte. Por exemplo, sugerir a boa prática de dar "bons nomes" às variáveis (e.g., int número ao invés de int A), uma vez que torna o código mais legível, entre outras possíveis sugestões.
     
  11. Muito obrigado a todos apesar de o programa já estar feito e a funcionar aprendi novas técnicas que ainda não sabia só uma duvida, vejo muito que voces escrevem tipo:

    for(i=1; i<=20; i++)

    poderiam me explicar o que é o i++, porque no meu programa tenho

    for (i=1;i<=20;i=i+1)

    em que o i represente o i iguail ao i mais 1 (claro), o vosso é igual mas simplificado ou tem outro esquema?

    muito obrigado
     
  12. AliFromCairo

    AliFromCairo Power Member

    Nesse caso em particular, é equivalente. No entanto, em determinadas situações poderá ser conveniente utilizar o i++ (post increment) ou ++i (pre increment), uma vez que têm significados diferentes. Tens aqui um exemplo simples, mas bastante esclarecedor.
     
  13. Mach4_PT

    Mach4_PT Power Member


    Uma pessoa a estar aqui a postar está apenas a mostrar outras maneiras de resolver o mesmo problema.

    Se achas que um problema só tem uma maneira de ser resolvido ou se achas que apenas saber uma maneira é bom, porreiro para ti.

    Se a maneira que eu sugeri é a melhor para o problema especificado ou não, já não sei. Provavelmente não é, até tu realças-te alguns pontos como o de só ler um digito.

    Admito que me enganei ao não ter posto o & no scanf e o return no final do main, mas tanta cena por causa disso?

    Peace out
     
    Última edição: 4 de Abril de 2009
  14. AliFromCairo

    AliFromCairo Power Member

    Mas eu não coloquei isso em questão. Apenas quis realçar que, ao colocar uma solução para alguém que se está a iniciar, se deve explicar sucintamente as alterações efectuadas, ou as ideias subjacentes; nada mais.
     
  15. Mach4_PT

    Mach4_PT Power Member

    Se vais por essa lógica de ideia, da próxima vez que tiveres a comentar um código em C usa /* COMENTARIO */ e não =>
     

Partilhar esta Página