Inserire 0 per tornare indietro e ripetere un'istruzione.

di il
7 risposte

Inserire 0 per tornare indietro e ripetere un'istruzione.

Ciao. Ho appena fatto un programma che mi fa inserire più prodotti, il loro prezzo ed eventualmente, se ho uno scondo inserendo 1 mi calcola il presso con lo sconto, invece se inserisco -1 va avanti al prossimo prodotto. Infine mi stampa lo scontrino con tutti i prodotti. Insomma un programma abbastanza semplice, lo metto qua sotto per farvi vedere:
#include<iostream>
#include <string>
using namespace std;
int main(){

    int Nprodotti;
    float prezzoTotale = 0;
    float scontoTotale = 0;
    float sconto;

    cout<<"Quanti prodotti vuoi inserire?"<<endl;
    cin>>Nprodotti;

    string nomeProdotto[Nprodotti];
    float prezzoProdotto[Nprodotti];
    float scontoProdotto[Nprodotti];
    int SI[Nprodotti];


    for(int i = 0; i < Nprodotti; i++) {
        cout << "\nInserisci Il nome del prodotto numero " << i+1 << endl;
        cin >> nomeProdotto[i];

        cout << "Inserisci il prezzo del prodotto in euro" << endl;
        cin >> prezzoProdotto[i];

        cout << "Hai uno sconto sul prodotto ? Inserisci 1 per inserire lo sconto, altrimento -1 per andare avanti"<<endl;
        cin >> SI[i];
            if(SI[i] == 1) {
                cout << "Inserisci lo sconto in percentuale -> ";
                cin >> scontoProdotto[i];
                sconto = prezzoProdotto[i] * scontoProdotto[i] / 100 ;
                prezzoProdotto[i] = prezzoProdotto[i] - sconto;
            }
        scontoTotale += sconto;
        prezzoTotale += prezzoProdotto[i];
        sconto = 0;
    }

    cout << "\nSCONTRINO" << endl;
    for(int i = 0; i < Nprodotti; i++) {
        if(SI[i] == 1) {
             cout << i+1 << " " << nomeProdotto[i] << " -" << scontoProdotto[i] << "% di sconto" << " ----\t ";
        }else {
                cout << i+1 << " " << nomeProdotto[i] << " -----------\t\t ";
              }
    cout << prezzoProdotto[i] << " euro" << endl;
    }
    cout << "\nSconto totale ----\t" << scontoTotale << " euro" << endl;
    cout << "\nPrezzo totale ----\t" << prezzoTotale << " euro" << endl;


  system("Pause");
  return 0;
}
Praticamente vorrei inserire, dopo ogni passaggio di input dell'utente, una stampa del tipo:
cout<<"Hai sbagliato ? Inserisci 0 per ripetere l'operazione ";
e quindi ogni volta che inserisco 0 mi torna indietro e mi fa ripetere inserendo un nuovo valore nella variabile. Visto che nessun prezzo può costare 0 ho provato con qualche IF per però non riesco. Sapevo anche che era possibile con qualche ciclo while però a quello serve una condizione e non so proprio come impostarlo. Vi prego aiutatemi!

7 Risposte

  • Re: Inserire 0 per tornare indietro e ripetere un'istruzione.

    Usa un blocco del genere per ogni inserimento (faccio un esempio con il nome del prodotto):
    
    { 
        int n = 0;
        while(!n){
        	cout << "\nInserisci Il nome del prodotto numero " << i+1 << endl;
            cin >> nomeProdotto[i];
            cout<<"Hai sbagliato ? Inserisci 0 per ripetere l'operazione ";
            cin>>n;
        }
    }
    
  • Re: Inserire 0 per tornare indietro e ripetere un'istruzione.

    Grazie mille
  • Re: Inserire 0 per tornare indietro e ripetere un'istruzione.

    Ci potrebbe essere un modo che praticamente funziona senza stampare ogni volta il messaggio?
    Cioè nel senso che controlli sempre se viene inserito 0 senza stampare ogni volta il messaggio. Magari una sola una volta all'inizio.

    Mi sarebbe più utile in questo modo.
  • Re: Inserire 0 per tornare indietro e ripetere un'istruzione.

    Basta che ometti di stampare il messaggio.
    Se invece di zero usi ESC che è standard, viene naturale usarlo quando uno sbaglia.
  • Re: Inserire 0 per tornare indietro e ripetere un'istruzione.

    appspotgo ha scritto:


    Ci potrebbe essere un modo che praticamente funziona senza stampare ogni volta il messaggio?
    Cioè nel senso che controlli sempre se viene inserito 0 senza stampare ogni volta il messaggio. Magari una sola una volta all'inizio.

    Mi sarebbe più utile in questo modo.
    
    do{	
       cout << "Inserisci il prezzo del prodotto in euro" << endl;
       cin >> prezzoProdotto[i];
      } 
    while(prezzoProdotto[i]>=0);
    
  • Re: Inserire 0 per tornare indietro e ripetere un'istruzione.

    Rubik ha scritto:


    Basta che ometti di stampare il messaggio.
    Se invece di zero usi ESC che è standard, viene naturale usarlo quando uno sbaglia.
    Come inserisco ESC nella condizione while?
  • Re: Inserire 0 per tornare indietro e ripetere un'istruzione.

    
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    unsigned char ascii=0;
    int main(){
        do{
            cout << "Premi un tasto, ESC per uscire ";
            ascii=getch(); // lettura tastiera
            cout<<endl<<"ASCII = "<<static_cast<int>(ascii)<<endl;
        }while (ascii != 27);
    }
    
Devi accedere o registrarti per scrivere nel forum
7 risposte