• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sion

Ignora Scanf

16 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então suponho que ele não está a ler o s e está a imprimir FIM para o ecran.

Lê isto: http://www.gidnetwork.com/b-60.html -> pk nao deves usar scanf para ler char.

Eu faria:

char * resposta;

scanf("%s",resposta);

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

....

else

....

0

Partilhar esta mensagem


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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :/?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes ser mais especifico? :s

EDIT: depois de muito  :wallbash: e muito  :wallbash: consegui resolver :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu faria:

char * resposta;

scanf("%s",resposta);

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

....

else

....

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

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