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?
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') {
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 ||
.
Podobne pytania
Nowe pytania
c
C jest językiem programowania ogólnego przeznaczenia, używanym do programowania systemów (system operacyjny i systemy wbudowane), bibliotek, gier i wielu platform. Ten znacznik powinien być używany w przypadku ogólnych pytań dotyczących języka C, zgodnie z definicją w standardzie ISO 9899 (najnowsza wersja 9899: 2018, chyba że określono inaczej - również oznaczanie żądań dotyczących wersji za pomocą c89, c99, c11 itd.). C różni się od C ++ i nie należy go łączyć ze znacznikiem C ++ bez racjonalnego powodu.
while( choice != 'n' || choice != 'N')
<-- jedna z tych opcji jest zawsze prawdziwa, więc pętla trwa w nieskończoność