Newsgroup: it.comp.lang.c++
Titolo: Primo programma

Ho creato (finalmente) una semplicissima calcolatrice, perň ottenuto un
traguardo me ne sono posto un altro... senza dilungarsi oltre:
Volevo creare una specie di menů che in caso si prema Q esca, in caso si
prema OK si entra nella calcolatrice, o si puň rientrare(creare un ciclo)...
ma mi va in "crash"(penso si scriva cosě) cioč ripeten all'infinito le
domande della calcolatrice.
Ecco il codice:
 #include <iostream.h>
void main() {
int exit;
int number;
char op;
int number2;
int  quit = 0;
while (quit == 0) {
cout <<"continuare o uscire?"<<endl;
cin >> exit  ;
cout <<"inserisci primo numero:";
cin >> number;
cout <<"inserisci operatore:    ";
cin >> op;
cout <<"inserisci secondo numero:";
cin >> number2;
     switch(exit){
                            case 'ok' :cout <<"calcolatrice";
                            break;
                            case 'q' :cout <<"uscita in corso...";
                            quit = 1;
                            break;
                            default : continue;
                            }
      switch(op){
     case '+' : cout <<"risultato =" <<number + number2<<endl;
     break                 ;
     case '-' : cout <<"risultato =" <<number - number2<<endl;
     break;
     case '*' : cout <<"risultato =" <<number * number2<<endl;
     break;
     case '/' : cout <<"risultato =" <<number / number2<<endl;
     break;
     default : cout <<"errore nell'inserimento dati, riprovare"<<endl;
                            }
                            }
                         }
Non essendo molto pratico del C++ se potreste dirmi l'errore ve ne sarei
grato... e se avete qualke osservazione da afre meglio ankora!!
P.S. il menů ero riuscito a farlo, ma non ad abbinarlo alla calcolatrice!!!
Grazie a tutti
  Silvio

Scusate ci sono riuscito... posto il codice(non è curato lo sò):
#include <iostream.h>
void main(){
char response;
int quit = 0;
int number;
char op;
int number2;
while (quit == 0 ){
cout <<"inserisci primo numero:";
cin >> number;
cout <<"inserisci operatore:    ";
cin >> op;
cout <<"inserisci secondo numero:";
cin >> number2;
switch(op){
     case '+' : cout <<"risultato =" <<number + number2<<endl;
     break                 ;
     case '-' : cout <<"risultato =" <<number - number2<<endl;
     break;
     case '*' : cout <<"risultato =" <<number * number2<<endl;
     break;
     case '/' : cout <<"risultato =" <<number / number2<<endl;
     break;
     default : cout <<"errore nell'inserimento dati, riprovare"<<endl;
                }
cout <<"ok orq";
cin >> response;
switch(response){
case'q' : cout << "usita"   <<endl;


 void main() {
int!!!
il main DEVE restiutuire un int!!!!
Infine un'indentazione decente, garantisco, aiuta a trovare
piů in fretta gli errori nel codice
Ah... per quit puoi usare un bool, invece di un int.
Posto il codice come lo correggerei io:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
int main()
{
    std::string exit;
    int number;
    char op;
    int number2;
    bool quit = true;
    while (quit)
    {
        cout <<"continuare o uscire?"<<endl;
        cin >> exit  ;
        if(exit=="q")
        {
            cout <<"uscita in corso...";
            quit = false;
        }
        else if(exit=="ok")
        {
            cout <<"calcolatrice" << endl;
            cout <<"inserisci primo numero:";
            cin >> number;
            cout <<"inserisci operatore:    ";
            cin >> op;
            cout <<"inserisci secondo numero:";
            cin >> number2;


 ha scritto nel messaggio
news:IcTv9.95583$RO.24...@twister1.libero.it...


 una lettera lui da errore???
La prima cosa che mi viene in mente č isdigit()
prova a cercare cosa trovi al riguardo.
Ultima cosa: il quoting.
http://it.geocities.com/usenetitalia/quoting.html
http://www.uwasa.fi/~ts/http/quote.html
 (inglese)
ciao
-- 
Gerolamo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 prova a cercare cosa trovi al riguardo.
non credo che isdigit risolva il problema dell'OP, in quanto, se con
cin inserisci un valore errato, prima di potere utilizzare di nuovo
lo stream devi resettare i bit di errore (non ricordo di preciso quale,
non ho sottomano il libro) con un generico cin.clear().
Il problema si può risolvere con un ciclo del genere:
int num;
while(! (std::cin >> num)) {
    std::cin.clear();
    std::cin.ignore();        /*per eliminare il '\n' del precedente input*/
    std::cout << "Errore nell'input: ripetere l'inserimento" << std::endl;
}
o, meglio ancora, utilizzando le std::string e getline, facendo il parsing
della stringa inserita.
--
Lupin85©
Azzurranet IRC: @#afiad, @#fils, @#pokegalaxy - ICQ: 91528290
Mail: Remove PAN to contact me
- "It is not important what you believe, only that you believe." -

 ha scritto nel messaggio
news:QfSw9.106627$RO.27...@twister1.libero.it...


 sempliccissima calcolatrice?)
Bella domanda... E' come chiedere a che servono le funzioni... Non provo 
nemmeno a spiegartela perchè non ho tempo, passo la mano...
-- 
Andrea Bergia - studente          Linux Registred User #281550
Per favore non mandatemi allegati in Word o PowerPoint.
Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html

 sempliccissima calcolatrice?)
Sono sicuramente la persona meno adatta a spiegarlo, perché sono un niubbo
della programmazione, ma ci provo comunque.
Sai bene che il C++ ha dei tipi di dato predefinito, come gli interi (int),
i caratteri (char), eccetera. Però questo linguaggio ci consente di creare
anche dei tipi di dato più astratti, per programmare ad un livello più alto.
Un esempio ne è la classe std::string: invece di trattare la stringa "a
basso
livello" come un array di char, puoi trattarla come un oggetto stringa,
raggiungendo un maggiore grado di astrazione e programmando a livello più
alto.
La classe è l'unità fondamentale di programmazione del C++ che è un
linguaggio
orientato agli oggetti. Se nella programmazione strutturata i dati erano
separati
dalle funzioni, nella programmazione orientata agli oggetti i dati e le
funzioni
che li manipolano sono incapsulati in un'unica unità: la classe.
Per quanto riguarda il tuo programma, la calcolatrice, tutto dipende da
quanto
complessa tu abbia intenzione di realizzarla. Per questo, tempo fa, ti ho
detto
che da questo esercizio avresti potuto imparare più di quanto credevi.
Potresti fare una calcolatrice semplice, come hai iniziato a fare, che
prende in
input due numeri e l'operatore, ma potresti anche fare una calcolatrice che
prenda
in input una stringa e l'analizzi, separando gli operandi dagli operatori e
gestendo le precedenze..
Spero di esserti stato utile.
Sicuramente avrò dimenticato nel mio discorso qualcosa di fondamentale,
oppure
avrò commesso qualche errore stupidissimo... Le correzioni sono benvenute :)


 che è un linguaggio orientato agli oggetti.
Questo non è esatto, in quanto il C++ supporta la programmazione
a oggetti, ma non ti costringe a utilizzarla.
Puoi scrivere buonissimo C++ senza crearti per forza una struttura
a oggetti e fronzoli vari.
Anche se, aumentando le dimensioni del progetto, programmare
almeno in parte a oggetti torna comodo.
--
Gerolamo (anch'io anch'io OE-QuoteFix!!! :-) )

 almeno in parte a oggetti torna comodo.
E' il programmatore a decidere il paradigma da adottare. Il C++ è,
in questo senso, un linguaggio aperto.


 Allora dove sta la differenza con il C?
template, eccezioni (un po' poco effettivamente... :-))


 Allora dove sta la differenza con il C?
in ordine sparso:
*libreria standard*, funzioni inline (supportate anche dal C99), 
template, reference, namespace, miglior type-checking, miglior supporto 
per la programmazione orientata agli ADT, overloading, overloading degli 
operatori.
Mi sembra sia abbastanza anche senza citare l'OO, no?
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 Mi sembra sia abbastanza anche senza citare l'OO, no?
Ma senza classi serve un po' a poco no? :-)


 degli operatori.
mi sono dimenticato le eccezioni...


 ha scritto nel messaggio
news:gbtbqa...@anto.cuni.lan...


 Ma senza classi serve un po' a poco no? :-)
Risposta idiota:
 
enum Prova { x = 0, y };
Prova operator+(Prova, Prova)
{
  return x;
}
:-))
Risposta normale: ho detto "senza OO", non "senza classi"; le classi sono 
il meccanismo usato dal C++ per implementare i concetti object oriented, 
ma questo non significa che "classe" significhi sempre e comunque "OO"; 
detto in termini matematici in C++ e` vero che "OO" implica "classi" ma 
non e` vero che "classi" implica "OO".
Vorrei citare il famoso articolo di William Cook "Object oriented 
programming versus abstract data type" in cui dice chiaramente come le 
classi in C++ servano anche ad implementare anche gli ADT, ma purtroppo 
non l'ho sottomano...
