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

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.