Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

wiser

[Resolvido] Ajuda com problema estranho

Mensagens Recomendadas

wiser

Boas, estou com um problema num pequeno comando que é um "ciclo infinito" q deveria dar para captar algumas componentes que o utilizador escrevesse mas umas vezes funciona outras vezes desformata e aparece varias vezes a string "Letra> "

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(void)
{
int a,c,d;
char b;
do {
	printf("Letra> ");
	a=scanf("%c %d %d",&b,&c,&d);
	if ((a) && (b=='q')) {
		break;
	}
	if ((a==3)&&(b=='p')) {
		printf("Ola\n");
		continue;
	}
        continue;
}while(1);
return 0;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IRX773

Posso estar errado (que é normal :D ) mas isto:        if ((a) && (b=='q'))          chamou-me a atenção

Para que é essa validação assim?

Uma do género            if (b=='q') {        fazia a mesma coisa certo?!

E acho que tens aí um continue a mais  🤔 aquele ultimo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
wiser

Boas, ya fazia a mesma coisa e já alterei obrigado! :D

Já retirei o continue mas o erro mantem-se pois quando eu inicio o programa acontece:

"Letra> " e depois se escrever "p 1 2" ele funciona, mas se escrever "q" ele pede outra char e tenho de escrever novamente q para ele fechar o programa...

:wallbash:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IRX773

Boas, ya fazia a mesma coisa e já alterei obrigado! :D

Já retirei o continue mas o erro mantem-se pois quando eu inicio o programa acontece:

"Letra> " e depois se escrever "p 1 2" ele funciona, mas se escrever "q" ele pede outra char e tenho de escrever novamente q para ele fechar o programa...

:wallbash:

Ya ... ele vai pedir as 3 variáveis nesse scanf. Experimenta primeiro pedir o char e fazes a validação para fechar ... depois fazes o scanf para os int's e as suas verificações. Senão terás de colocar as 3 variáveis quando ele faz scanf e acontece isso

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Porque é que a está a receber o retorno da função scanf?

E só mais uma coisa. Não faças um do...while(1). Poupas dois if se fizeres isto:

do {
  //scanf aqui.
  printf("Olá\n");
}while(b != 'q');


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
wiser

Boas pessoal antes de mais peço desculpa pelo tempo mas tive sem net e não pude vir cá.

Entretanto depois de ter aplicado as vossas optimizações descobri o "erro".

Se trocar a ordem pela q sao pedidos os dados ele não vai ter de ser corrido para poder ver se o utilizador usa 3 argumentos :thumbsup:

Thanks

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.