[C] Ciclo do while che non termina

di il
2 risposte

[C] Ciclo do while che non termina

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... )

2 Risposte

  • Re: [C] Ciclo do while che non termina

    Per uscire dal ciclo stai richiedendo che sia falsa la condizione che c sia un numero diverso da 46 o che sia diverso da 63 o che sia diverso da 33.

    Secondo te esiste un numero che soddisfa tale richiesta?
  • Re: [C] Ciclo do while che non termina

    Weierstrass ha scritto:


    Per uscire dal ciclo stai richiedendo che sia falsa la condizione che c sia un numero diverso da 46 o che sia diverso da 63 o che sia diverso da 33.

    Secondo te esiste un numero che soddisfa tale richiesta?
    Stupido me , la condizione giusta era (ovviamente)
    
    while (c != '.' && c != '?' && c != '!') ; 
    
    Grazie per la risposta
Devi accedere o registrarti per scrivere nel forum
2 risposte