Ir para o conteúdo
Sion

Ignora Scanf

Mensagens Recomendadas

Sion    0
Sion

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Sion    0
Sion

ya.. eu queria que ele primeiro le-se o 's' ou outro e depois respondia o resultado ou FIM

OK, vou ver como se usa o ghesi, ja n venho ao forum a algum tempo xP

Alguma solucao :x?

nao percebo porque que ele ignora

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warrior    68
Warrior

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",&:P; forçando-o assim a ler a mudança de linha.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Sion    0
Sion

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

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

Teres isso é o mesmo que teres

}while ('n');

que é será sempre verdadeiro.

O que queres é

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Sion    0
Sion

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 :/?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
greed    2
greed

Eu faria:

char * resposta;

scanf("%s",resposta);

if(strcmp(resposta,"s") == 0)

....

else

....

Não alocaste espaço para a resposta...

peço imensas desculpas!

a declaração da variavel resposta passa a ser:

char * resposta = (char *) malloc(sizeof(char));

p.s: nao esquecer de fzer include da stdlib para nao terem warnings.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade