duvida Programa em C

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 A, e, i;
char B, C, numero, letra;
 
printf ("deseja digitar uma letra ou um numero?\n");
scanf("%c", &C );
 
if (C = 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:
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.
 
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 A, e, i, d;
 char B, C, c;
 
 printf ("Deseja introduzir um caracter ou um digito? \n");
 printf ("Para caracter, escreva 'c'. Para digito escreva 'd'. \n");
 scanf("%c", &C );
 
    if (C == '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 == '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
 
PHP:
main ()
{
int i;
char C;
 
printf ("deseja digitar uma letra ou um numero?\n");
scanf("%c", &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:
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
 
PHP:
main ()
{
int i;
char C[100];
 
printf ("deseja digitar uma letra ou um numero?\n");
gets(C );
 
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:
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:
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);
}
}

}
 
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.
 
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
 
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.
 


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:
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.
 
Back
Topo