Salve a tutti.
In questo piccolo programma acquisisco un testo da standard input e lo immetto in un array con un semplice ciclo do while.
Tutto funziona se il while ha una sola condizione:
// Reverses the words in a sentence
#include <stdio.h>
#define N 200
int main(void)
{
char terminal, c;
char sentence[N] = { 0 };
int i = 0;
printf("Enter a sentence: ");
// acquisisce il testo immesso in un array
do {
c = getchar();
sentence[i] = c;
++i;
} while (c != '.') ; // il ciclo termina quando trova un punto
// stampa il contenuto dell'array
for (int i = 0; i < N; ++i) {
printf("%c", sentence[i]);
}
return 0;
}
Se invece pongo piú di una condizione, il ciclo while non termina mai:
// Reverses the words in a sentence
#include <stdio.h>
#define N 200
int main(void)
{
char terminal, c;
char sentence[N] = { 0 };
int i = 0;
printf("Enter a sentence: ");
// ***Questo ciclo non termina mai!***
// acquisisce il testo immesso in un array
do {
c = getchar();
sentence[i] = c;
++i;
} while (c != '.' || c != '?' || c != '!') ; // il ciclo termina quando trova un punto, un ! o un ?
// stampa il contenuto dell'array
for (int i = 0; i < N; ++i) {
printf("%c", sentence[i]);
}
return 0;
}
La situazione non cambia anche se sostituisco il do while con un for.
Come mai? (pensavo di aver capito i cicli ma devo ricredermi... )