sto realizzando un programma che permette di verificare se l'anno è bisestile o no, il problema è che il programma viene compilato senza problemi,ma quando inserisco l'anno non mi dice se è bisestile o no, ma spunta "premere un tasto per terminare il programma";cosa devo cambiare nel codice?
il codice è questo:
Spoiler:
#include <iostream>
#include <cstdlib>
using namespace std;
int anno2;
int main(){
cout<<"Inserisci l'anno\n";
cin>>anno2;
int annobisestile(anno2);
system("pause");
return 0;
}
int annobisestile(int anno){
if(((anno%4==0)&&(anno%100 !=0)) || (anno%400==0))
cout<<"L'anno e' bisestile!\n";
else
cout<<"L'anno non e' bisestile\n";
return anno;
}
Firma rimossa per peso eccedente il limite imposto dal Regolamento (40960 byte).
Saverione
togli system("pause"); e metti un altro cin>>anno2;
è il comando pause di dos che ti fa apparire quel messaggio, mettendo un altro cin costringi il tuo programma ad aspettare un input dall'utente prima di chiudersi
Ultima modifica di Eclipse; 29-09-2007 alle 12:13:58
Ci sono vari errori concettuali, il primo che ti hanno già fatto notare è che vai a richiamare una funzione in modo sbagliato. Il secondo invece è che vai a fare una cosa inutile, cioè vai ad effettuare una funzione di tipo int, quando questo non serve, infatti restituisci il parametro "anno" che hai fini del programma è superfluo e inutile, visto che il valore non viene neanche modificato dalla funzione che vai a chiamare, quindi devi fare una funzione di tipo void e levare il return. Il terzo errore è che fai una funzione dopo il main, questa non viene letta per niente, allora o metti un prototipo prima del main e dopo definisci la funzione (cioè metti quello che dovrà fare) in questo modo:
Codice:
void funzione(parametro);
int main {
..
..
}
void funzione(parametro) { //qui la svolgi
cout<<"blablabla";
...
...
}
Altrimenti non metti per niente il prototipo e fai direttamente la funzione prima del main in questo modo:
Codice:
void funzione(parametro) { //qui la svolgi
cout<<"blablabla";
...
...
}
int main {
..
..
}
Tuttavia ti consiglio la prima che è molto più elegante, in definitiva il codice corretto da tutti gli errori è il seguente:
Codice:
#include <iostream>
#include <cstdlib>
using namespace std;
//prototipo
void annobisestile(int anno);
//programma principale
int main(){
int anno2;
cout<<"Inserisci l'anno\n";
cin>>anno2;
annobisestile(anno2);
system("pause");
return 0;
}
//svolgo la funzione
void annobisestile(int anno){
if(((anno%4==0)&&(anno%100 !=0)) || (anno%400==0))
cout<<"L'anno e' bisestile!\n";
else
cout<<"L'anno non e' bisestile\n";
}
N.B. La variabile anno2 l'ho dichiarata nel main, e non come hai fatto tu in precedenza, che hai praticamente dichiarato un parametro globale che si poteva usare in tutte le funzioni e in quel caso sarebbe stato inutile anche il passaggio dei parametri nella funzione, ma non credo che fosse quello che avevi intenzione di fare, difatti in quel modo bastava rinsolvere così:
Spoiler:
Codice:
#include <iostream>
#include <cstdlib>
using namespace std;
//prototipo
void annobisestile();
//parametro globale che posso usare dapertutto.
int anno2;
//programma principale
int main(){
int anno2;
cout<<"Inserisci l'anno\n";
cin>>anno2;
annobisestile();
//system("pause");
return 0;
}
//svolgo la funzione
void annobisestile(){
//come vedi non passo parametri ma uso solo la variabile globale.
if(((anno2%4==0)&&(anno2%100 !=0)) || (anno2%400==0))
cout<<"L'anno e' bisestile!\n";
else
cout<<"L'anno non e' bisestile\n";
}
Però questo è un metodo sconsigliato, meglio fare come prima.
Spero di essere stato chiaro. CIao.
Ultima modifica di bomber88m; 29-09-2007 alle 17:36:30
L'ingegnere quantistico Seth Lloyd è convinto che
l'universo sia un gigantesco computer. Speriamo non faccia girare Windows.