Pergunta

#include<iostream>
using namespace std;

int main()
{

    char again;
    do
    {
        cout<<"you are in the while loop";
        cout<<"do you want to continue looping?";
        cin>>again;
    } while (again != 'n' || again != 'N');

    system("pause");
    return 0;
}

i sabe que algo está errado com a condição de teste no 'enquanto'. Mas eu não posso descobrir isso.

quando a entrada do usuário não é nem 'n' nem 'N', o loop deve continuar a imprimir o código "você está no loop while". Uma vez que 'n' ou 'N' é pressionada, o programa irá ser terminada.

No entanto, para o meu código, o programa vai continuar a loop o código independentemente qual personagem eu entrar. Mas quando eu mudar o '||' para '&&', a RAN programa pode conforme desejado. Alguém pode me dizer o que está acontecendo?

Foi útil?

Solução

Esta é uma pergunta lógica booleana comum. meios || "ou", que significa "desde que um dos lados desta é verdadeiro, então a expressão é verdadeiro." Então, quando você passar um 'N' maiúsculas para c != 'n' || c != 'N' o programa diz "bem, 'N' não é igual a 'n', portanto, um lado da expressão é verdadeira, pois, toda a expressão é verdadeira e não há necessidade de verificar o resto da expressão. " Mesmo quando você pressiona 'n' minúsculas, o programa diz "bem, 'n' é igual a 'n', mas não é igual a 'N', portanto, um lado da expressão é verdadeira, pois, toda a expressão é verdadeira." Isto é o que está acontecendo em seu loop while.

Por outro lado, os meios && "e" que significa "ambos os lados da expressão deve ser verdade"; quando você passar um 'N' maiúsculas para c != 'n' && c != 'N' o programa pensa "'N' não é igual a 'n', mas é igual a 'N', portanto, apenas um lado da expressão é verdadeira, portanto, a expressão é falsa."

Isso fica confuso, porque se você estivesse testando para ver se os caracteres inseridos eram iguais aos valores específicos você usaria || (por exemplo, "Eu quero saber se 'a' ou 'b' ou 'c' foi digitado ").

Basicamente, quando você usaria || para uma expressão particular, e você quer o oposto do que a expressão, então você precisa mudar para && (por exemplo, eu quero que nenhum de 'a', 'b' ou 'c'; ou, dito de outra forma, o valor não pode ser 'a' e não pode ser 'b', e não pode ser 'c' "). da mesma forma, se você usaria && para uma expressão particular, e você quer o oposto dessa expressão, então você precisa usar ||. Esta é uma das leis de de Morgan, que eu recomendo que você leia sobre para que você pode evitar ter que redescobrir cada um deles em seu próprio país.

Outras dicas

Sim: || é "ou" e && é "e".

cada personagem é qualquer "não 'n'" ou "não 'N'" porque não pode, eventualmente, ser ambos ' n' e 'N' simultaneamente.

Outro (provavelmente mais simples para ler) forma de escrever a condição seria:

!(again == 'n' || again == 'N')

que significa "o oposto de (novamente quer 'N' ou 'N')".

É a álgebra booleana chamada "leis De Morgan ".

Not (P And Q) = (Not P) Or (Not Q)
Not (P Or Q) = (Not P) And (Not Q)

No seu caso, você deseja que os usuários não entrar 'n' ou 'N', pode-se traduzir em com esta lógica.

!(again == 'n' || again == 'N')

Ao aplicar as leis de De Morgan, será

(again != 'n' && again != 'N')

Para obter mais informações, você pode querer ler proposicional

Embora o cartaz original está feliz agora, eu não vi isso em outras respostas:

(true  && true ) == true
(true  && false) == false
(false && true ) == false
(false && false) == false

(true  || true ) == true
(true  || false) == true
(false || true ) == true
(false || false) == false

!true  == false
!false == true

Isso tudo é!

Eu entendo o seu problema bem, e aqui está a explicação:

A fazer-while é um loop de saída-condição. Isto significa que o corpo do laço é sempre executado em primeiro lugar. Em seguida, a condição de teste é avaliada. Se a condição de teste é TRUE, o programa executa o corpo do loop novamente. Se a condição de teste é FALSE, o termina loop e programa de execução continua com a seguinte instrução ao mesmo tempo.

em seu código, quando você press'n 'or'N', a sua condição de teste será sempre um verdadeiro e um falso, Então, quando você usar || você irá satisfazer a condição de teste (true || falsa = true), então o programa irá executar o corpo do loop novamente. mas quando você usa &&, essa vontade dá (true && falsa = false), a condição de teste não é statisfied mais, para que o programa não irá executar o corpo do loop novamente.

Espero que isso seja útil ..... desfrutar de programação! Ameraradi

&& é um E lógico. || é um OR lógico.

(também, e é um bit a bit AND, e |. É um bit a bit OR)

Você pode querer tentar while (! (Novamente == 'n' || novamente == 'N'))

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top