Oppure

Loading
24/02/09 9:40
stefanopeppy
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:
#include <iostream.h>
using namespace std;

int main(){
    char op = 'y';
    cin >> op;
    if(op!='y' or op!='Y'){
                do{
                               cout << "ancora: ";
                               cin >> op;
                }while(op!='y' or op!='Y');
    }

system("PAUSE");
return 0;
}
aaa
24/02/09 10:56
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.
aaa
24/02/09 11:09
manvb.net
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...

#include <iostream>
using namespace std;

int main(){
    char op = 'y';
    cin >> op;
    if(!(op=='y' || op=='Y')){
                do{
                               cout << "ancora: ";
                               cin >> op;
                }while(!(op=='y' || op=='Y'));
    }

system("PAUSE");
return 0;
} 


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 24/02/09 11:34
aaa
24/02/09 14:10
stefanopeppy
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.
aaa
24/02/09 14:59
theprogrammer
Per trasformare in maiuscolo usa la variabile

toupper

In ogni caso l'input sarà come lo inserisce l'utente.
aaa
24/02/09 15:12
stefanopeppy
E allora scrivere in maiuscolo a cosa serve in questo caso?? solo a rendere la finestra più carina??
aaa