PDA

View Full Version : [c++]perchè non gli piace cin?


moritzplatz
08-08-2008, 11:54
facendo gli esercizi del libro "programmare in c++" della o'reilly ne ho trovato uno che chiedeva di scrivere un programma che dato il numero di risposte corrette restituiva il voto...
dopo averne fatto uno con un ciclo while che non funzionava ho provato #include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
int risposte_corrette;
cin >> risposte_corrette;
if (risposte_corrette<61) cout<<"F"<<endl;
else if(risposte_corrette<71) cout<<"D"<<endl;
else if(risposte_corrette<81) cout<<"C"<<endl;
else if(risposte_corrette<91) cout<<"B"<<endl;
else if(risposte_corrette<101) cout<<"A"<<endl;
else cout<<"le risposte corrette non sono un intero compreso tra 1 e 100"<<endl;
getch();
return 0;
} questo ma mi scrive sempre f...
mi sapete dire perchè?
grazie

variabilepippo
08-08-2008, 12:00
L'ho provato e funziona... Gli passi in input un valore nel range corretto?

DanieleC88
08-08-2008, 12:14
Perché includi conio.h per la sola getch() quando puoi includere cstdio e usare getchar()?

Per il resto, dovrebbe funzionare... magari usa un unsigned int come tipo per la variabile, non hai bisogno di usare numeri negativi (anche se non dovresti ottenerli comunque).

moritzplatz
08-08-2008, 12:22
io non passo nulla lo runno e quello mi scrive F....
poi se premo un tasto si chiude
che cambia se includo conio o cstdio?

DanieleC88
08-08-2008, 12:41
Cambia che conio.h non è standard (usi un compilatore Borland? :D). Una volta letto il valore prova a stamparlo, così vediamo cosa gli arriva (magari la pressione di qualche tasto rimasta in coda che arriva al tuo programma al momento dell'esecuzione).

moritzplatz
08-08-2008, 12:48
lo usavo:)
ora il programma è cosi[B]#include <cstdlib>
#include <iostream>
#include <cstdio.h>
using namespace std;
unsigned int main(){
unsigned int risposte_corrette;
cin >> risposte_corrette;
cout<<risposte_corrette<<endl;
if (risposte_corrette<61) cout<<"F"<<endl;
else if(risposte_corrette<71) cout<<"D"<<endl;
else if(risposte_corrette<81) cout<<"C"<<endl;
else if(risposte_corrette<91) cout<<"B"<<endl;
else if(risposte_corrette<101) cout<<"A"<<endl;
else cout<<"le risposte corrette non sono un intero compreso tra 1 e 100"<<endl;
getchar();
return 0;
}
ma appena lo runno mi scrive F ma appena provo a inserire un valore mi si chiude la finestra...
come compilatore uso code::blocks

DanieleC88
08-08-2008, 13:17
No, o usi cstdio o stdio.h (sono forme equivalenti), non cstdio.h. :D

E con questa modifica non ti stampa anche un valore numerico, scusa, prima di scrivere "F"? :)
Comunque Code::Blocks è un'IDE, probabilmente stai compilando con MinGW in questo momento. :)

ciao ;)

moritzplatz
08-08-2008, 13:21
ah.. grazie
hai ragione sto usando mingw...
non scrive niente prima:confused:
scrive solo F...
che strano...

DanieleC88
08-08-2008, 13:26
Prova questo:
#include <iostream>
#include <cstdio>

int main()
{
unsigned int n = 0;

cout << "Inserisci un valore numerico: ";
cin >> n;
cout << endl;

cout << "Ho ricevuto il valore " << n << "." << endl;
if (n <= 60)
{
cout << "F";
}
else if (n <= 70)
{
cout << "D";
}
else if (n <= 80)
{
cout << "C";
}
else if (n <= 90)
{
cout << "B";
}
else if (n <= 100)
{
cout << "A";
}
else
{
cout << "Valore non accettabile.";
}
cout << endl;

cout << endl << "Premi INVIO per uscire." << endl;
getchar();
return 0;
}

moritzplatz
08-08-2008, 13:52
ok ora funziona grazie
bisognava solo aggiungere nel tuo
using namespace std;
per il resto tutto ok
per qualche strano motivo nonostante io cliccassi su build and run lui runnava solo e sempre quello vecchio...
grazie
ciao:D