Logo Hardware.com.br
NAKED_DEXTER
NAKED_DEXTER Membro Junior Registrado
112 Mensagens 0 Curtidas

goto incompativel na volta com o scanf

#1 Por NAKED_DEXTER 02/11/2003 - 19:13
bom gente pelo menos aqui ta dando um erro fiz esse programa pata eu ficar testando minha senhas para ver se elas batem.

so que quando eu digito a senha certa ae o prog pergunta ne se eu deseso continuar. se se elel faz goto ask. so que ele passa pelo scanf e na para e so para pela segunda vez, ta ocorrendo isso no outro goto tb o goto begin. experimenta ae digitar a senha errada ele vai passar pelo primeiro scanf.....

o programa compilado esta disponivel em http://fernando.mecanicaguimaraes.com.br/senha
a ta compilado para linux, se voce tiver um compilador para windows por favor compile ae e veja se da o mesmo errro...
aqui nesse forum nao tem como anexar arquivos entao.....

#include
#include
espaco()
{
printf("\n");
}

main()
{
int i=0;
char x[100], y[100], c;
begin:

// Obtem os duas senhas
printf("Digite a senha: ");
gets(x);
printf("Redigite a senha: ");
gets(y);

// Compara as duas senhas se iguais pergunte ao usuario se deseja continuar treinando a senha.

if (!(strcmp(x, y)))
{
printf("As senhas conferem\n");
ask:
printf("Deseja continuar treinando a senha? (s/n)");
scanf("%c", &c);

if (c=='s')
{
espaco();
goto begin;
}

if (c=='n')
{
return 0;
}

else goto ask;

}

else
{
printf("A senha esta errada voltando, para sair do programa digite ctrl+c");
espaco();
goto begin;
}
return 0;
}
Lgub
Lgub Super Participante Registrado
936 Mensagens 1 Curtida
#3 Por Lgub
03/11/2003 - 11:18
Seguinte, o uso de desvio incodicional do tipo goto não é recomendavel em programação estruturada. Só uma dica.
Agora para resolver o seu problema faça isso antes do scanf();
fflush(stdin);

Essa funcao limpa o buffer do teclado.
Linux User:#326216
Intel I7 - 920 - 6G DDR3 Tripple Channel @1600 - Geforce 285 1G.
Programador ADVPL(Fazer o que é o que ta pagando as contas no momento...)
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#5 Por jqueiroz
04/11/2003 - 19:07
Seu programa, sem o goto:


#include <stdio.h>
#include <string.h>
void espaco()
{
printf("\n&quot;
}

int main()
{
int i=0;
char x[100], y[100], c;

while (1) {

// Obtem os duas senhas
printf("Digite a senha: &quot; fflush(stdin);
gets(x);
printf("Redigite a senha: &quot; fflush(stdout);
gets(y);

// Compara as duas senhas se iguais pergunte ao usuario se
// deseja continuar treinando a senha.

if (!(strcmp(x, y)))
{
printf("As senhas conferem\n&quot;
do {

printf("Deseja continuar treinando a senha? (s/n)&quot;
scanf("%c", &c);

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

if (c == 'n')
break;
} // if strcmp

else
{
printf("A senha esta errada voltando, para sair do programa digite ctrl+c&quot;
espaco();
}
} // while(1)

}


Note que eu substituí o marcador do loop externo (begin) por um while, e o interno (ask) por um do ... while.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal