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

    C++ Riavviare l' esecuzione del programma da capo.

    Perchè se eseguo dinuovo il mio programma, ad ogni esecuzione successiva, mi somma i risultati delle esecuzioni precedenti?

    codice:
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    void input( int v[], int &r, int &k);
    void somma( int v[], int r, int k, float &som, int &ris);
    void output( int v[], int r, int k, float som, int ris);
    
    
    int main(){
        char avv;
        int r,k;
        int v[100];
        float som=0;
        int ris=0;
        
        
        do{
        system ("cls");
        //Intestazione
        cout<<"\n*******************************************************************************\n\n";
        
        input(v,r,k);
        somma(v,r,k,som,ris);
        output(v,r,k,som,ris);    
        
        //Riavvio
        cout<<"\n\n\n\n*******************************************************************************\n";
        cout<<"Per riavviare il programma premere (s) e invio, altrimenti (n) invio:\t";
        cin>>avv;
    }while(avv=='s' || avv=='S');
    return 0;
    }
    //Siano assegnati in ingresso un vettore di interi V, di riempimento r, ed un intero k<r.
    void input( int v[], int &r, int &k){
         cout<<"Inserisci il numero di elementi del vettore:\n";
         cin>>r;
         cout<<"Riempi il vettore:\n";
         for(int i=0; i<r; i++){
                 cout<<i+1<<") ";
                 cin>>v[i];
                 }
         cout<<"Inserisci un valore K:\n";
         cin>>k;
         }
    
    void somma( int v[], int r, int k, float &som, int &ris){
         //Calcolo la somma S dei primi k elementi del vettore.
         for(int i=0; i<k; i++){
                 if(k<r){
                         som = som + v[i];
                         }}
                         
         //Costruire un vettore W costituito dagli elementi di V di valore maggiore di S.
         for(int i=0; i<r; i++){
                 if(som<v[i]){
                              v[ris]=v[i];
                              ris++;
                              }}}
         
                           
                         
                 
    void output( int v[], int r, int k, float som, int ris){
         if(k>r){
                 cout<<"Ripetere l' operazione inserendo un valore K<R.\n";
                 }
         
                 else{                          
         cout<<"Somma dei primi K elementi generata:\n"<<som<<"\n";
         if(v[ris]<som){
                        cout<<"Vettore W=0.\n";
                        }
                        else{
         cout<<"Vettore W formato dai K elementi maggiori di S:\n";
         for(int i=0; i<ris; i++){
                 cout<<v[i]<<"\n";
                 }}}}

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Dopo ogni
    codice:
    cin >> qualcosa;
    Metti:
    codice:
    cin.clear();
    cin.ignore(INT_MAX,'\n');
    per pulire il buffer di input.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Niente da fare al massimo esiste una stringa di codice alternativa alla mia?

  4. #4
    som e ris sono inizializzati a zero fuori dal ciclo, per cui all'esecuzione successiva partono con i valori che avevano al giro prima. Puoi risolvere, ad esempio, spostando la loro dichiarazione all'interno del ciclo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Capito male io, scusa. Comunque tieni buono quel codice nel caso in futuro il cin si comporti in maniera strana.
    Il motivo è che non azzeri le variabili nel ciclo do while.
    codice:
        do{
            system ("cls");
            som=0;
            ris=0;
    Se non lo fai, mantengono i dati precedenti.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6

    RISOLTO

    Wooo che grandi grazie mille, e grazie soprt. per quella stringa di codice, sono sicuro che mi tornerà utile

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.