Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Cicli e operatore
Forum - C/C++ - Cicli e operatore "or"

Avatar
stefanopeppy (Normal User)
Newbie


Messaggi: 9
Iscritto: 24/02/2009

Segnala al moderatore
Postato alle 10:40
Martedì, 24/02/2009
Salve a tutti ragazzi, mi chiamo Stefano, e sono un nuovo iscritto a questo stupendo forum..
Avrei bisogno di un aiuto da voi, sicuramente più esperti di me.
Ho fatto un esercizietto in cui dichiaro la variabile "op" di tipo char;
La faccio leggere in input.
Se la variabile op è diversa da "Y" o "y" parte un ciclo
in modo che finchè non viene inserita o "y" o "Y" ripeterà sempre "ancora:".
Se metto "y" o "Y" però non esce dal ciclo. PERCHE' :-?

Grazie in anticipo, CIAO RAGAZZI! :k:


ECCO IL CODICE:    
Codice sorgente - presumibilmente C++

  1. #include <iostream.h>
  2. using namespace std;
  3.  
  4. int main(){
  5.     char op = 'y';
  6.     cin >> op;
  7.     if(op!='y' or op!='Y'){
  8.                 do{
  9.                                cout << "ancora: ";
  10.                                cin >> op;
  11.                 }while(op!='y' or op!='Y');
  12.     }
  13.  
  14. system("PAUSE");
  15. return 0;
  16. }


PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 11:56
Martedì, 24/02/2009
Gli operatori relazionali OR e AND, in C/C++, NON si scrivono in quel modo.

Si usa

&&

per indicare AND e si usa

||

per indicare OR.

Correggi quindi il tuo sorgente (che attualmente dovrebbe dare errori in compilazione) e controllane anche la LOGICA perche' l'operatore OR in quella if non mi sembra una scelta corretta.

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 12:09
Martedì, 24/02/2009
Utilizzando l'operatore != la condizione sarà sempre vera:

se op = 'y'
op != 'y' //falso
op != 'Y' //vero
falso or vero = vero

se op = 'Y'
op != 'y' //vero
op != 'Y' //falso
vero or falso = vero

ma anche se op = 'c'
op != 'y' //vero
op != 'Y' //vero
vero or vero = vero

quindi in caso il carattere inserito non sia y o Y
la condizione è sempre vera

ti conviene allora usare un == con una negazione perchè se:

op = 'c'
!(op=='y' || op=='Y') //vero

se op = 'Y'
!(op=='y' || op=='Y') //falso

e così via...

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.     char op = 'y';
  6.     cin >> op;
  7.     if(!(op=='y' || op=='Y')){
  8.                 do{
  9.                                cout << "ancora: ";
  10.                                cin >> op;
  11.                 }while(!(op=='y' || op=='Y'));
  12.     }
  13.  
  14. system("PAUSE");
  15. return 0;
  16. }



Testo quotato

Postato originariamente da theprogrammer:

Gli operatori relazionali OR e AND, in C/C++, NON si scrivono in quel modo.

Si usa

&&

per indicare AND e si usa

||

per indicare OR.

Correggi quindi il tuo sorgente (che attualmente dovrebbe dare errori in compilazione) e controllane anche la LOGICA perche' l'operatore OR in quella if non mi sembra una scelta corretta.



Con la maggior parte dei compilatori è possibile scrivere anche and è or:
Borland c++ lo permette implicitamente
g++ ha bisogno dell'opzione -foperator
Visual c++ ha bisogno di includere il file <iso646.h>

anche se non è c++ standard non dovrebbe dare errori di compilazione su Borland c++ e simili.

Ultima modifica effettuata da manvb.net il 24/02/2009 alle 12:34
PM Quote
Avatar
stefanopeppy (Normal User)
Newbie


Messaggi: 9
Iscritto: 24/02/2009

Segnala al moderatore
Postato alle 15:10
Martedì, 24/02/2009
Perfetto, grazie 1000! :D
Volevo chiedervi un'altra cosa:
"Posso impostare un blocco maiuscolo durante l'esecuzione del programma
in modo da non fare distinzioni tra 'y' e 'Y'?? Ed anche per rendere il tutto più carino..
Vi ringrazio, Stefano.

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 15:59
Martedì, 24/02/2009
Per trasformare in maiuscolo usa la variabile

toupper

In ogni caso l'input sarà come lo inserisce l'utente.

PM Quote
Avatar
stefanopeppy (Normal User)
Newbie


Messaggi: 9
Iscritto: 24/02/2009

Segnala al moderatore
Postato alle 16:12
Martedì, 24/02/2009
E allora scrivere in maiuscolo a cosa serve in questo caso?? solo a rendere la finestra più carina??

PM Quote