Jump to content

Ignora Scanf


Sion

Recommended Posts

Boas tou a fazer um programa simples com a estrura IF, mas o meu programa quando chega ao Scan do char ignora-o e passa a frente se puderem ajudar agradecia! šŸ™‚

#include <stdio.h>

int main()
{
int a,b,c,d,e,f;
char resposta;
   printf("Introduza o primeiro numero\n");
   scanf("%d",&a); /*Leitura do primeiro num*/
   printf("Introduza o segundo numero\n");
   scanf("%d",&b); /*Leitura do segundo num*/
   c=a+b;
   d=a-b;
   e=a*b;
f=a/b;
printf("Prima 's' se quizer ver os resultaos\n");
scanf("%c",&resposta);
if ( resposta == 's') /*Confirmacao se o utilizador que ver os resultados*/
{
      printf("O resultado da soma e %d\n O Da divisao e %d\n O da multiplicacao e %d\n O E da Divisao e %d\n",c,d,e,f);
}
else  /*Caso o utilizador prima kkl coisa se nao o 's'*/
{
	printf("FIM"); /*FIM do programa!*/
}
}

Cumps.

_________________Cenas pĆ”.

Link to comment
Share on other sites

Não tem nada a ver com isso, e não hÔ nenhum problema em usar scanf para ler caracteres, especialmente nesta solução em que getchar não resolve.

Coloca um espaƧo antes do %c, ficando scanf(" %c",&resposta);

O que estÔ a acontecer é que o scanf estÔ a ler o \n inserido pelo utilizador no final da ultima resposta e que ficou no buffer de entrada (uma vez que só foi lido o número).

O ' ' antes do %c obriga-o a ler um caracter que não \n ' ' e \t.

Como alternativa podes modificar o scanf da leitura do segundo numero para scanf("%d\n",&šŸ˜› ; forƧando-o assim a ler a mudanƧa de linha.

Link to comment
Share on other sites

desculpem o double post, mas como me surgiu outro problema queria aproveitar o topico, e nao consigo editar

o meu problema estÔ na segunda fase do código quando comeca o ciclo com o do{, ele no fim valida se resposta = 's' || 'n', no entando mesmo que seja 's' ou 'n' ele volta ao ciclo e nunca saí dele :/ , nao percebo o que é que ta a falhar..

Código :

#include <stdio.h>

int main()
{
int a,b,c,d,e,f,;
char resposta;
   printf("Introduza o primeiro numero\n");
   scanf("%d",&a); /*Leitura do primeiro num*/
   printf("Introduza o segundo numero\n");
   scanf("%d",&b); /*Leitura do segundo num*/
   c=a+b;
   d=a-b;
   e=a*b;
f=a/b;
do{
printf("Prima 's' se quizer ver os resultaos\n");
scanf(" %c",&resposta);
if ( resposta == 's') /*Confirmacao se o utilizador que ver os resultados*/
{
      printf("O resultado da soma e %d\n O Da divisao e %d\n O da multiplicacao e %d\n O E da Divisao e %d\n",c,d,e,f);
}
if ( resposta == 'n')
{
        printf("FIM\n");
   }

}while (resposta != 's' || 'n');
}

Cumps

_________________Cenas pĆ”.

Link to comment
Share on other sites

}while (resposta != 's' || 'n');

Teres isso Ć© o mesmo que teres

}while ('n');

que Ć© serĆ” sempre verdadeiro.

O que queres Ć©

}while (resposta != 's' && resposta != 'n');

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Axo que isso resolve o meu problema, mas agora da-me outro esqusitio na compilação, com o Dev , o programa fecha logo a seguir à leitura  da varÔvel, nao importa que eu ponha system("pause"), ou gethcar();, com o Visual studio dame erro na compilacao , o sistema nao consegue localizar o ficheiro indicado (programa.exe)

:S!

alguma idea :/?

_________________Cenas pĆ”.

Link to comment
Share on other sites

linux.

LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL

pĆ” desculpem se for considerado spam

mas não se poe linux, escreve-se

Solução para a paz mundial, e a fome em África...

Ɠrale MI RAZA, MY BLOOD HOLMES BELONGS TO ME ƉSE...

EENNNGGGGEEEENNNNNNNHHHHAAAARRRRRIIIIIIIIIIAAAAAAAINFORMATICASISTEMAS....

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.