2013-08-31 24 views
5

Ho scritto un programma di esercitazione per la mia classe e tutto in esso funziona tranne che per restituire il valore di una variabile. La mia domanda è, perché non restituisce il valore? Ecco un esempio di codice che ho scritto per evitare di copiare e incollare parti di codice non rilevanti.Valore restituito non restituito variabile

#include <iostream> 
using std::cout; using std::cin; 
using std::endl; using std::fixed; 

#include <iomanip> 
using std::setw; using std::setprecision; 

int testing(); 

int main() 
{ 
    testing(); 

    return 0; 

} 

int testing() { 
    int debtArray[] = {4,5,6,7,9,}; 
    int total = 0; 

    for(int debt = 0; debt < 5; debt++) { 
    total += debtArray[debt]; 
    } 

    return total; 
} 
+2

Questo codice semplicemente scarta il valore restituito. Prova a cambiare 'testing();' a 'std :: cout << testing();' e vedi se non ottieni qualcosa. –

+1

La funzione 'testing' restituisce effettivamente un valore. Ma semplicemente scarti quel valore nella chiamata. Cosa ti aspettavi che accadesse? –

+1

* "Ecco il codice di esempio che ho scritto per evitare di copiare e incollare parti di codice non rilevanti." * - E ti ringraziamo per questo. –

risposta

9

Infatti, la funzione è restituire un valore. Tuttavia, main() sta scegliendo di ignorare quel valore di ritorno.

Prova quanto segue nel main():

int total = testing(); 
std::cout << "The total is " << total << std::endl; 
2

Il codice è perfetto, ma non assume il valore che viene restituito dalla funzione testing() Prova questo,
Questo conterrà i dati che si sta restituito dalla funzione testing()

#include <iostream> 
using std::cout; using std::cin; 
using std::endl; using std::fixed; 

#include <iomanip> 
using std::setw; using std::setprecision; 

int testing(); 

int main() 
{ 
    int res = testing(); 
    cout<<"calling of testing() returned : \t"<<res<<"\n"; 
    return 0; 

} 

int testing() { 
    int debtArray[] = {4,5,6,7,9,}; 
    int total = 0; 

    for(int debt = 0; debt < 5; debt++) { 
    total += debtArray[debt]; 
    } 

    return total; 
} 
4

La funzione restituisce un valore. Non visualizzi il valore restituito sullo schermo, ecco perché pensi che non restituisca un valore

3

Return non è equivalente a print. Se si desidera che il valore restituito dalla funzione venga visualizzato su stdout, è necessario disporre di un metodo per farlo. Questo si ottiene stampando il valore che è stato restituito con std::cout e l'operatore sia in << principale o nella funzione stessa

4

testing()fa restituiscono un valore, ma il valore non viene utilizzato o salvato da nessuna parte. Tu sei using std :: cout, std :: cin, std :: endl, ecc. Ma non sei utilizzando loro. Suppongo che quello che volevi fare fosse visualizzare total. Un programma per che sarebbe simile:

#include <iostream> 
using std::cout; 
using std::endl; 

int testing(); 

int main() { 
    int totaldebt = testing(); 
    cout << totaldebt << endl; 

    return 0; 
} 

int testing() { 
    int debtArray[] = {4,5,6,7,9}; 
    int total = 0; 

    for(int debt = 0; debt < 5; debt++) { 
     total += debtArray[debt]; 
    } 

    return total; 
} 

Quello che sta accadendo nel codice è (supponendo che il compilatore non ottimizzare in alcun modo) all'interno main(), testing() è chiamato, passa attraverso le sue istruzioni, e quindi il programma avanza. La stessa cosa accade se si chiama printf da <cstdlib>. printf si suppone che restituisca il numero di caratteri visualizzati, ma se non si memorizza il risultato ovunque, viene visualizzato solo il testo e il programma continua.

Quello che devo chiedere è perché sei using più di quello che effettivamente usi? O questo non è il codice completo?

+0

Non il codice completo. – ExpletiveDeleted

+0

@ExpletiveDeleted Ah, va bene, stavo per dire che stavi "usando" così tante cose che non hai mai effettivamente usato. –