Problemi con void

di il
9 risposte

Problemi con void

Salve a tutti
non ho ben capito quando e come usare una funzione con void, in generale e rispetto a quelle a una uscita (int/float/bool)
vi spiego meglio: ho scritto un programma semplice che calcola modularmente una potenza inserendo da tastiera base ed esponente; con una semplice funzione di interi il giochino funziona bene;
adesso per provare a capire come lavorare su funzioni void (hanno un nome specifico?) ho provato a cambiare leggermente il pezzo di codice dove definisco la funzione e poi il suo richiamo nel main.
la funzione viene compilata ma a quanto pare il suo richiamo è sbagliato.
non essendo in grado di compilare non posso nemmeno sapere se effettivamente funziona, quindi chiedo una mano a voi
vi incollo entrambe le stringhe

#include <iostream> //funzionante
using namespace std;
int potenza (int base,int esp)
{int pot=1;
for (int i=1; i<=esp; i++)
pot=pot*base; return pot;
}
int main ()
{int b,e;
cout<<"inserire base ed esponente"<<endl;
cout<<"base="; cin>>b;
cout<<"esponente="; cin>>e;
int risultato=potenza(b,e);
cout<<"risultato=";
cout<<risultato;
}



#include <iostream>
using namespace std;

void potenza (int base,int esp, int& pot)
{pot=1;
for (int i=1; i<=esp; i++)
pot=pot*base;
}
int main ()
{int b,e;
cout<<"inserire base ed esponente"<<endl;
cout<<"base="; cin>>b;
cout<<"esponente="; cin>>e;
cout<<"risultato=";
int risultato = potenza(b,e,risultato); //<- in questa riga il compilatore mi segnala errore
cout<<risultato;					// "void value not ignored as it ought to be"
}
grazie dell'aiuto

9 Risposte

  • Re: Problemi con void

    Semplicemente una funzione void non ritorna niente, quindi non puoi scrivere qualcosa=funzione void, perché la funzione void non ha valore di ritorno
  • Re: Problemi con void

    Quindi come dovrei fare per farla funzionare?
  • Re: Problemi con void

    raffxy1211 ha scritto:


    Quindi come dovrei fare per farla funzionare?
    E' ok così come l'hai fatta, ma non devi "assegnare la chiamata della funzione" a risultato, in quanto già lo passi per riferimento come parametro
    
    potenza(b,e,risultato);
    
    In risultato avrai "il risultato".

    Mi sa che devi riprendere in mano i libri che capire cosa vuol dire int&....
  • Re: Problemi con void

    non ho ben capito quando e come usare una funzione con void, in generale e rispetto a quelle a una uscita (int/float/bool)

    raffxy1211 ha scritto:


    Quindi come dovrei fare per farla funzionare?
    Da questa domanda si capisce che non hai inteso la differenza tra NON restituire un valore e RESTITUIRE un valore.

    Se la funzione calcola una potenza e la deve restituire, riflettici un attimo, deve essere void o no?
  • Re: Problemi con void

    Sostituendo a
    int risultato = potenza(b,e,risultato);
    questo
    int risultato; potenza(b,e,risultato);
    il programma viene compilato correttamente e funziona come quell'altro.
    credo di aver capito anche il perchè: quando chiamo la funzione void potenza(a,b,c) non ha di per se un valore ma mi calcola il risultato dell'espressione con a e b parametri in ingresso e me lo salva nella variabile c
    giusto?
  • Re: Problemi con void

    Diciamo che è giusto, ma avresti dovuto saperlo studiando non andando a casaccio e intuirlo...
  • Re: Problemi con void

    Io invece faccio un'osservazione più concreta.
    In generale le funzioni void (cioè le procedure) sono sconsigliabili, e almeno un dato - cioè fallimento/ok - va ritornato.
    Tipicamente con un banale 0 / 1.
    Questo in generale è molto utile per verificare che non sia andato "storto" qualcosa.
    Nel tuo programma ,ad esempio, ti rammento che è possibile passare sia interi nulli (cioè con valore zero) che negativi.
    Cosa fa la tua funzione potenza?
  • Re: Problemi con void

    Beh premettendo che nonostante il tipo int usato, il programmino lo avevo pensato solo per valori positivi, quando ci metto una base negativa funziona ugualmente; quando ad essere negativo è l'esponente mi pareva scontato che non funzionasse nulla più per come ho definito la potenza nella funzione. andando a verificare il valore che mi restituisce è sempre 1.
  • Re: Problemi con void

    Cioè per te è scontato che un tuo programma possa non funzionare "più nulla" solo perchè l'utente inserisce un dato che non avevi previsto?

Devi accedere o registrarti per scrivere nel forum
9 risposte