Ir ao conteúdo

Erro com while e printf


ens_silva

Posts recomendados

Postado

Este é o código do programa, na verdade é o pedaço que está dando erro.

Ele entra no while independente de qual tecla você digite.

Não sei porque isso aconte, queria a ajuda de vocês.

valeu.

#include <stdio.h>

main()

{

char retirarCarta;

printf ("Retirar uma nova carta?(s/n): ");

scanf ("%c",&retirarCarta);

//pula uma linha para melhor visualizacao

printf ("\n");

//esta com erro

while ((retirarCarta != 'n')||(retirarCarta != 'N')||(retirarCarta != 's')||(retirarCarta != 'S'))

{

printf ("Valor indisponivel.\n");

printf ("Retirar uma nova carta?(s/n): ");

scanf ("%c",&retirarCarta);

//pula uma linha para melhor visualizacao

printf ("\n");

}

printf ("fim\n");

}

Postado

Pronto coloquei a negação englobando todas as condições.

main()
{
char retirarCarta;
printf ("Retirar uma nova carta?(s/n): ");
scanf ("%c",&retirarCarta);
//pula uma linha para melhor visualizacao
printf ("\n");
//esta com erro
while (!((retirarCarta == 'n')||(retirarCarta == 'N')||(retirarCarta == 's')||(retirarCarta == 'S')))
{
printf ("Valor indisponivel.\n");
printf ("Retirar uma nova carta?(s/n): ");
scanf ("%c",&retirarCarta);
//pula uma linha para melhor visualizacao
printf ("\n");
}
printf ("fim\n");
}

Postado
Também pode substituir os || por &&.

Na verdade não porque seria necessário que todas as condições fossem verdadeiras e no caso com o "||" sendo uma verdadeira ele executa.

Postado

Não precisa de tanta condição, bastam duas para o N e n


#include <stdio.h>

main()
{
char retirarCarta;
printf ("Retirar uma nova carta?(s/n): ");
scanf ("%c",&retirarCarta);
while (retirarCarta!='n' && retirarCarta!='N'){
printf ("Valor indisponivel.\n");
printf ("Retirar uma nova carta?(s/n): ");
fflush(stdin); //limpa o buffer do teclado (scanf)
scanf ("%c",&retirarCarta);
}
}

Postado
Não precisa de tanta condição, bastam duas para o N e n


#include <stdio.h>

main()
{
char retirarCarta;
printf ("Retirar uma nova carta?(s/n): ");
scanf ("%c",&retirarCarta);
while (retirarCarta!='n' && retirarCarta!='N'){
printf ("Valor indisponivel.\n");
printf ("Retirar uma nova carta?(s/n): ");
fflush(stdin); //limpa o buffer do teclado (scanf)
scanf ("%c",&retirarCarta);
}
}

Precisa sim o programa faz uma pergunta "Retirar uma nova carta?" a resposta e apenas sim ou não se eu validar apenas o "n e N" ao digita "s ou S" este entra na condição valor indisponivel ou seja nunca havera um sim para a pergunta, desta forma são necessarias todas essas condições.

Postado

Adrianled,

valeu ai agora ta tudo certo, mas eu não entendi porque o meu estava dando errado e agora da dando certo com essa modificação. Alguem poderia me explicar?

Outra coisa alguem sabe se tem como centralizar o q o printf imprimi?

valeu

Postado

Ahh entedi, foi mal. voce ta querendo que só possa digitar 'S' 's' 'N' ou 'n' né?

Amigo, uma coisa que a gente aprende na faculdade é a não se preocupar com usuário burro entendeu? Se preocupe com o código e parta da premissa de que ele fará o indicado. Se voce bota um scanf com inteiro e o usuário digita um char, seu programa vai capotar. Você não pode ficar testando sempre essas condições.

Então neste caso, parta da premissa que ele digitará uma das opções. É como V e F, 0=falso, qualquer outra coisa é verdadeira. Neste caso 'n' e 'N' são falsos, qualquer outra coisa q ele digite será equivalente a um SIM.

No seu codigo:

Digitando 'P':

while ((retirarCarta != 'n')||(retirarCarta != 'N')||(retirarCarta != 's')||(retirarCarta != 'S'))

while ((V)||(V)||(V)||(V))

while(V) //entra no laço

Digitando 'S':

while ((retirarCarta != 'n')||(retirarCarta != 'N')||(retirarCarta != 's')||(retirarCarta != 'S'))

while ((V)||(V)||(V)||(F)) // Verdadeiro OU Falso é sempre Verdadeiro.

while (V) //entra no lago

Você deve ta com dificuldade com lógica:

V ou F = V

V ou V = V

F ou F = F

V e F = F

V e V = V

F e F = F

Postado

Penso contrario e necessário sim se preocupar com o usuário não digo burro, mas sim com menor familiaridade com o programa e interessante ter essa preocupação desde o inicio porque futuramente quando seus programas forem cada vez, mas complexo você já tem uma base sólida em relação ao pensamento do usuário, por isso acho importante programar sempre pensado de duas formas uma como programador e outra como usuário por mais besta que seja o código manter essa relação usuário programa vai ter poupar muita dor de cabeça futuramente.

Afinal de contas e graças a esses usuários que temos emprego.

Postado
Penso contrario e necessário sim se preocupar com o usuário não digo burro, mas sim com menor familiaridade com o programa e interessante ter essa preocupação desde o inicio porque futuramente quando seus programas forem cada vez, mas complexo você já tem uma base sólida em relação ao pensamento do usuário, por isso acho importante programar sempre pensado de duas formas uma como programador e outra como usuário por mais besta que seja o código manter essa relação usuário programa vai ter poupar muita dor de cabeça futuramente.

Afinal de contas e graças a esses usuários que temos emprego.

Com certeza este programa não será destinado a comercialização. Sendo apenas um objeto de estudo, o mais importante é estudar a lógica de programação. Futuramente quando existirem usuários para usar seu programa, você se preocupa com esse tipo de erro. Inclusive, a gente se preocupa com isso por causa dos espíritos de porco, que vêm "digite um número" e aperta uma letra só pra sacanear ou ver o que acontece. Então primeiro faça seu programa pra voce, partindo pra premissa que voce digitará tudo certo. Depois, se voce for passar pra algum usuário burro, voce pode até se preocupar com a entrada de dados, mas ainda assim, acho que o importante são as instruções e não corrigir os erros do usuário. Por exemplo, se voce solicitar uma nota, um brasileiro digitaria 9,5 e no SI é 9.5 então voce deve indicar isso e não esperar ele fazer a ***** pra corrigir. Somos programadores e não babá.

Postado

Afora entendi qual era o meu erro, mo vacilo.

Em relação a tratar o erro no meu programa, é necessário porque a professora pediu, na verdade esse é um pedaço do código para um trabalho que ela pediu.

valeu

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!