Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

akkamaishami

while dando nó na cabeça

Recommended Posts

Boa noite pessoal. Se alguém puder me ajudar com o laço while:

 

int main() {

int n=1;

while(n==1)

{

char cidade[20];

int habitantes;

printf("Digite o nome da cidade: ");

gets(cidade);

printf("Digite a quantidade de habitantes: ");

scanf("%d", &habitantes);

nome (cidade);

classificacao(habitantes);

printf("\nDigite 1 para continuar rodando o programa");

printf("\nDigite qualquer outro numero para encerrar o programa. ");

scanf("%d",&n);

printf("\n");

}

return 0;

}

 

O que acontece... ao passar pelo laço a primeira vez ele para pra que eu informe a cidade e depois o número de habitantes. Depois, quando digito "1" para retornar ao laço ele não para na cidade, passa direto para o número de HB, assim não consigo informar o nome da nova cidade.

Se puder me ajudar, ficarei grato.

 

Akkamai Kalil Shami

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está ficando 'sujeira' no buffer de entrada na hora que lê a opção de sair ou continuar no programa.

Coloque isto (para ele ignorar o último caractere):

 

//...

printf("\nDigite 1 para continuar rodando o programa");
printf("\nDigite qualquer outro numero para encerrar o programa. ");
scanf("%d%*c",&n); // <<--
//...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Neelix, bom dia.

Cara, muito obrigado, resolveu meu problema. Hoje é o último dia pra eu entregar o trabalho da faculdade e só faltava essa questão.

 

Você pode me dizer como se forma essa "sujeira" e como a linha "scanf("%d%*c",&n);" resolveu o problema?

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você digitava, por exemplo, 1 para continuar, era enviado "1\n". A função scanf pegava o que foi lido (o '1') e descartava o '\n' (caractere de controle) deixando-o no buffer de entrada. Na segunda passagem pelo loop o '\n' era lido automaticamente e então dava aquela impressão de "ter pulado a leitura da cidade".

 

Com o *, ele irá ignorar o caractere, então usando-o assim "scanf("%d%*c",&n)" o '\n' será descartado.

 

----

 

Esse tópico explica melhor: http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.