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

Sign in to follow this  
wiser

[Resolvido] Ajuda com problema estranho

Recommended Posts

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;
}

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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:

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
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
Sign in to follow this  

×

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.