Precedente :: Successivo |
Autore |
Messaggio |
Catta Comune mortale
Registrato: 29/01/07 18:58 Messaggi: 3
|
Inviato: 29 Gen 2007 19:07 Oggetto: Bug introvabile in C++ |
|
|
Ciao a tutti....
avrei un problemino con un programma in C++.... non capisco dove sta l'errore...
mi da 1 errore nello switch... (la riga evidenziata)
Citazione: | #include <iostream>
using namespace std;
void main()
{
cout <<"Benvenuti nel programma 'Orologio Digitale'...\n\n";
int ore,minuti,secondi,giorno,mese,anno;//dichiarazione delle variabili
char tasto,formato;
formato='n';
cout <<"\nCome vuoi visualizzare il formato della data?\nn)Numerico[es.1/1/2007]\ne)Esteso[es. 1 gennaio 2007] ";
cin >>formato;
cout <<"Inserisci l'anno...";
cin >>anno;
do
{
cout <<"Inserisci il mese [1...12]...";
cin >>mese;
}
while((mese<1)||(mese>12));
switch(mese)
{
case ((1)||(3)||(5)||(7)||(8)||(10)||(12)):do
{
cout <<"Inserisci il giorno...[1..31]...";
cin >>giorno;
}
while((giorno<1)||(giorno>31));
break;
case 2: do
{
cout <<"Inserisci il giorno...[1..28]...";
cin >>giorno;
}
while((giorno<1)||(giorno>28));
break;
case ((4)||(6)||(9)||(11)): do
{
cout <<"Inserisci il giorno...[1..30]...";
cin >>giorno;
}
while((giorno<1)||(giorno>30));
break;
}
if(formato=='n')
{
cout <<"******************************\nData Corrente:"<<giorno<<"/"<<mese<<"/"<<anno<<"\n******************************";
}
do
{
cout<<"\nInserire l'ora corrente [0...23] ";
cin>>ore;
}
while((ore<0)||(ore>23));
do
{
cout<<"Inserire i minuti correnti corrente [0...59] ";
cin>>minuti;
}
while((minuti<0)||(minuti>59));
do
{
cout<<"Inserire i secondi correnti [0...59] ";
cin>>secondi;
}
while((secondi<0)||(secondi>59));
//Visualizzazione ora corrente
do
{
cout <<"\n******************************\nOra Corrente:"<<ore<<":"<<minuti<<":"<<secondi;
if(formato=='n')
{
cout <<"\nData Corrente:"<<giorno<<"/"<<mese<<"/"<<anno;
}
else if(formato=='e')
{
switch(mese)
{
case 1: cout <<"\nData Corrente:"<<giorno<<" Gennaio "<<anno;
break;
case 2: cout <<"\nData Corrente:"<<giorno<<" Febbraio "<<anno;
break;
case 3: cout <<"\nData Corrente:"<<giorno<<" Marzo "<<anno;
break;
case 4: cout <<"\nData Corrente:"<<giorno<<" Aprile "<<anno;
break;
case 5: cout <<"\nData Corrente:"<<giorno<<" Maggio "<<anno;
break;
case 6: cout <<"\nData Corrente:"<<giorno<<" Giugno "<<anno;
break;
case 7: cout <<"\nData Corrente:"<<giorno<<" Luglio "<<anno;
break;
case 8: cout <<"\nData Corrente:"<<giorno<<" Agosto "<<anno;
break;
case 9: cout <<"\nData Corrente:"<<giorno<<" Settembre "<<anno;
break;
case 10: cout <<"\nData Corrente:"<<giorno<<" Ottobre "<<anno;
break;
case 11: cout <<"\nData Corrente:"<<giorno<<" Novembre "<<anno;
break;
case 12: cout <<"\nData Corrente:"<<giorno<<" Dicembre "<<anno;
break;
}
}
cout <<"\nFinito? [s/n] ";
cin >>tasto;
secondi++;
if(secondi>=60)
{
minuti++;
secondi=0;
}
if(minuti>=60)
{
ore++;
minuti=0;
}
if(ore>=24)
{
ore=0;
giorno++;
}
if(ore==0)
{
if((giorno>28)&&(mese==2))
{
mese++;
giorno=1;
}
if (giorno==30)
{
if((mese==4)||(mese==6)||(mese==9)||(mese==11))
{
mese++;
giorno=1;
}
}
if((giorno>31)&&(mese==1)||(mese==3)||(mese==5)||(mese==7)||(mese==8)||(mese==10))
{
mese++;
giorno=1;
}
else if((giorno==31)&&(mese==2))
{
anno++;
mese=1;
}
}
}
while(tasto!='s');
system("pause");
}
|
lasciando stare l'utilità praticamente nulla di questo programma... vorrei riuscire a trovare l'errore.... è da poco che programmo... ma qui non capisco proprio dove ho sbagliato.... |
|
Top |
|
|
Crono Semidio
Registrato: 24/03/05 14:12 Messaggi: 224 Residenza: Trieste
|
Inviato: 30 Gen 2007 13:59 Oggetto: |
|
|
Hai scritto lo switch con una sintassi non corretta, la forma giusta è:
switch(mese) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: do {
cout <<"Inserisci il giorno...[1..31]...";
cin >>giorno;
} while((giorno<1)||(giorno>31));
break;
case 2: do {
cout <<"Inserisci il giorno...[1..28]...";
cin >>giorno;
} while((giorno<1)||(giorno>28 ));
break;
case 4:
case 6:
case 9:
case 11: do {
cout <<"Inserisci il giorno...[1..30]...";
cin >>giorno;
} while((giorno<1)||(giorno>30));
break;
}
Altrimenti puoi utilizzare la forma:
if((mese==1)||(mese==3)||(mese==5)||(mese==7)||(mese==8 )||(mese==10)||(mese==12)) { codice; }
else if((mese==4)||(mese==6)||(mese==9)||(mese==11)) { codice; }
else { codice; } |
|
Top |
|
|
Catta Comune mortale
Registrato: 29/01/07 18:58 Messaggi: 3
|
Inviato: 30 Gen 2007 14:49 Oggetto: |
|
|
ma non è quindi possibile fare uno switch case "multiplo"??
ossia... per tutti i carattero o numeri in ingresso... corrisponde una determinata operazione??
e ultima cosa... come mai nella compilazione solo a questa riga mi da l'errore mentre nelle altre no??
grazie cmq... |
|
Top |
|
|
Crono Semidio
Registrato: 24/03/05 14:12 Messaggi: 224 Residenza: Trieste
|
Inviato: 30 Gen 2007 17:38 Oggetto: |
|
|
Ogni case può avere un solo valore di confronto e per confrontare più valori contemporaneamente devi utilizzare if oppure lasci in bianco tutti i case tranne uno come mostrato nell'esempio.
Come il compilatore riconosce gli errori di sintassi dipende dal tipo di linguaggio, dalla grammatica utilizzata, dall'algoritmo di parsing, io non so assolutamente nulla di questi argomenti, se vuoi sapere come funziona davvero la "programmazione" devi studiare un testo che tratti le teorie matematiche che stanno dietro ai linguaggi di programmazione e ai compilatori |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11566 Residenza: Tokelau
|
Inviato: 30 Gen 2007 17:57 Oggetto: |
|
|
Catta ha scritto: | e ultima cosa... come mai nella compilazione solo a questa riga mi da l'errore mentre nelle altre no?? |
perchè:
(1)||(3)||(5)||(7)||(8)||(10)||(12) = 15
ma anche
(4)||(6)||(9)||(11) = 15
quindi avevi due rige come case: 15 e la seconda non vale |
|
Top |
|
|
Catta Comune mortale
Registrato: 29/01/07 18:58 Messaggi: 3
|
Inviato: 30 Gen 2007 22:56 Oggetto: |
|
|
SverX ha scritto: | perchè:
(1)||(3)||(5)||(7)||(8)||(10)||(12) = 15
ma anche
(4)||(6)||(9)||(11) = 15
quindi avevi due rige come case: 15 e la seconda non vale |
asp... questo nn l'ho capito....
Crono ha scritto: | Ogni case può avere un solo valore di confronto e per confrontare più valori contemporaneamente devi utilizzare if oppure lasci in bianco tutti i case tranne uno come mostrato nell'esempio.
Come il compilatore riconosce gli errori di sintassi dipende dal tipo di linguaggio, dalla grammatica utilizzata, dall'algoritmo di parsing, io non so assolutamente nulla di questi argomenti, se vuoi sapere come funziona davvero la "programmazione" devi studiare un testo che tratti le teorie matematiche che stanno dietro ai linguaggi di programmazione e ai compilatori |
perfetto.... grazie 1000!!!! |
|
Top |
|
|
horus Macchinista
Registrato: 22/03/05 09:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 31 Gen 2007 09:01 Oggetto: |
|
|
Catta ha scritto: | asp... questo nn l'ho capito.... |
Pensa in binario |
|
Top |
|
|
|