W przypadku użycia logicznego operatora OR w pętli while dla wartości Char program nie działa poprawnie.

Kod jest następujący:

#include <stdio.h>

void main() {
    char choice = 'y';

    while( choice != 'n' || choice != 'N') {

        int num;
        printf("\nEnter any number: ");
        scanf("%d", &num);

        int i = num - 1;

        while(i >= 1) {
            num *= i;
            i--;
        }

        printf("Factorial is: %d\n", num);
        printf("Do you want to continue? \n");
        printf("Enter n to quit or y to continue\n");
        scanf(" %c", &choice);
    }
}

Wynik:

Enter any number: 3
Factorial is: 6
Do you want to continue? 
Enter n to quit or y to continue
n

Enter any number: 3
Factorial is: 6
Do you want to continue? 
Enter n to quit or y to continue
N

Enter any number: 

Jeśli zmienię instrukcję while na przykład na:

while( choice != 'n' ) {

Program działa dobrze. To logiczne LUB powoduje błąd.

Dlaczego występuje ten problem? A jak sprawić, by program działał z operatorem logicznym OR?

-1
Samantha 26 styczeń 2022, 21:08
3
while( choice != 'n' || choice != 'N') <-- jedna z tych opcji jest zawsze prawdziwa, więc pętla trwa w nieskończoność
 – 
r3mainer
26 styczeń 2022, 21:13

2 odpowiedzi

Logiczny operator OR || zwraca wartość prawda, jeśli jakokolwiek wyrażenie jest prawdziwe.

Więc jeśli choice to N, to choice != 'n' jest prawdziwe, a jeśli choice to n, to choice != 'N' jest prawdziwe. Jeśli choice nie jest żadnym z tych, to oba są prawdziwe. Tak więc pełny warunek zawsze będzie prawdziwy.

Zamiast tego chcesz użyć logicznego operatora AND &&. Zwraca to wartość prawda tylko wtedy, gdy oba wyrażenia są prawdziwe.

while( choice != 'n' && choice != 'N') {
1
dbush 26 styczeń 2022, 21:13

Jeśli umieścisz n, choice != 'N' jest prawdziwe i trwa.

Jeśli umieścisz N, choice != 'n' jest prawdziwe i trwa.

Powinno być && zamiast ||.

1
the_bond_007 26 styczeń 2022, 21:14