Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Bug introvabile in C++
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Catta
Comune mortale
Comune mortale


Registrato: 29/01/07 18:58
Messaggi: 3

MessaggioInviato: 29 Gen 2007 19:07    Oggetto: Bug introvabile in C++ Rispondi citando

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
Profilo Invia messaggio privato
Crono
Semidio
Semidio


Registrato: 24/03/05 14:12
Messaggi: 224
Residenza: Trieste

MessaggioInviato: 30 Gen 2007 13:59    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
Catta
Comune mortale
Comune mortale


Registrato: 29/01/07 18:58
Messaggi: 3

MessaggioInviato: 30 Gen 2007 14:49    Oggetto: Rispondi citando

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... Very Happy
Top
Profilo Invia messaggio privato
Crono
Semidio
Semidio


Registrato: 24/03/05 14:12
Messaggi: 224
Residenza: Trieste

MessaggioInviato: 30 Gen 2007 17:38    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11566
Residenza: Tokelau

MessaggioInviato: 30 Gen 2007 17:57    Oggetto: Rispondi citando

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 Smile
Top
Profilo Invia messaggio privato HomePage
Catta
Comune mortale
Comune mortale


Registrato: 29/01/07 18:58
Messaggi: 3

MessaggioInviato: 30 Gen 2007 22:56    Oggetto: Rispondi citando

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 Smile

Rolling Eyes Rolling Eyes Rolling Eyes asp... questo nn l'ho capito.... Very Happy Very Happy

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
Profilo Invia messaggio privato
horus
Macchinista
Macchinista


Registrato: 22/03/05 09:48
Messaggi: 2554
Residenza: Sirio e dintorni

MessaggioInviato: 31 Gen 2007 09:01    Oggetto: Rispondi

Catta ha scritto:
Rolling Eyes Rolling Eyes Rolling Eyes asp... questo nn l'ho capito.... Very Happy Very Happy

Pensa in binario Wink
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi