Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c++]Lotteria in console, errori vari

    buongiorno e buona befana
    chiedo un piccolo aiuto riguardo al codice che ho scritto di sotto, che mi presenta i seguenti problemi:
    • errore con i break;
    • errore con gli if;

    utilizzo codeblock e quando avvio la build mi da questi errori :
    error: break statement not within loop or switch (line :36,44,52,60,68)
    error: non l-value in assignment(line : 41,57,65)
    error: expected primary-expression before '=' token(line: 49)

    codice:
    #include <iostream>#include <cstdlib>
    using namespace std;
    
    
    int main()
    {
        //numeri generati dal computer
        int mono;
        int ambo;
        int terno;
        int quaterna;
        int cinquina;
        //numeri scelti dall'utente
        int primo;
        int secondo;
        int terzo;
        int quarto;
        int quinto;
        //valore puntata
        int iniziale;
        double due; //vincita x2 volte
        double tre;//vincita x30 volte
        double quattro;//vincita x400 volte
        double cinque;//vincita x5000 volte
    
    
        cout << "Benvenuto nella lotteria";
        cout << "\nquanto punta?(5,10...)\t";
        cin >> iniziale;
        //primo numero
        primo:
        cout << "\nscelga primo numero tra 1 e 90: ";
        cin >> primo;
        if (primo<=0)
            cout << "\nvalore non consentito, ripetere prego";
        goto primo;
        break;
        //secondo numero
        secondo:
        cout <<"scelga il secondo: ";
        cin >> secondo;
        if (secondo<=0 and secondo=primo)
            cout << "\nvalore non consentito, ripetere prego";
        goto secondo;
        break;
        //terzo
        terzo:
        cout <<"terzo: ";
        cin >> terzo;
        if (terzo<=0 and terzo=primo or =secondo)
            cout << "\nvalore non consentito, ripetere prego";
        goto terzo;
        break;
        //quarto
        quarto:
        cout <<"quarto: ";
        cin >> quarto;
        if (quarto<=0 and quarto=primo or quarto=secondo or quarto=terzo)
            cout << "\nvalore non consentito, ripetere prego";
        goto quarto;
        break;
        //quinto
        quinto:
        cout <<"quinto: ";
        cin >> quinto;
        if (quinto<=0 and quinto=primo or quinto=secondo or quinto=terzo or quinto=quarto)
            cout << "\nvalore non consentito, ripetere prego";
        goto quinto;
        break;
        //riassunto
         cout<< "\nriassumendo questi sono i suoi numeri: \n";
         cout << primo << secondo << terzo << quarto << quinto;
         //generazione
         mono = 1 + rand() % 91;
         ambo = 1 + rand() % 91;
         terno = 1 + rand() % 91;
         quaterna = 1 + rand() % 91;
         cinquina = 1 + rand() % 91;
    
    
    
    
    
    
    
    
    
    
        return 0;
    }

  2. #2
    1. I goto non vanno usati se non in situazioni estremamente particolari; nel caso specifico, tutti quei goto vanno sostituiti con un do...while;
    2. In questo codice ci sono errori molto grossolani di sintassi; il C++ è un linguaggio molto complicato, approcciarlo inventandosi la sintassi a caso non può portare a nulla di buono.

    Venendo agli errori specifici:
    Quote Originariamente inviata da Becius Visualizza il messaggio
    error: break statement not within loop or switch (line :36,44,52,60,68)
    Non saprei cosa aggiungere a quanto già ti dice il compilatore... cosa ti aspetti che faccia il break se sei fuori da un ciclo?
    error: non l-value in assignment(line : 41,57,65)
    error: expected primary-expression before '=' token(line: 49)
    Stai facendo un uso molto creativo dell'=... l'operatore di confronto è ==, mentre = è solo operatore di assegnamento. Per questo motivo, in tutti gli if vorrai usare ==. Inoltre, le espressioni booleane sono normali espressioni, non puoi inventarti sintassi come "terzo=primo or =secondo" - il compilatore non è umano, non comprende il "linguaggio naturale", ma devi rispettare la sintassi attesa (terzo==primo || terzo==secondo).

    Infine, se è vero che gli "alias testuali" per gli operatori relazionali (and, or, xor, ...) sono ammessi dal C++, in pratica non li usa nessuno e sono abbastanza malvisti; usa i simboli "veri" (vedi qui).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    MItaly grazie mille per la risposta rapida e per tutti i suggerimenti, ora dò una correzione generale e vedo come và; non voglio difendermi con questo, ma sono veramente alle basi e studio da autodidatta spero di non ripetere più ste fesserie

  4. #4
    Tranquillo, non ti si accusa di niente però il mio consiglio è, approcciando un linguaggio come il C++, di procurarsi un libro e seguirlo per bene, altrimenti si rischia di fare solo pasticci.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    io uso C++: fondamenti di programmazione della Deitel

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.