2013-08-31 43 views
5

Tôi đã viết một chương trình thực hành cho lớp của mình và mọi thứ trong đó hoạt động ngoại trừ việc trả về giá trị của một biến. Câu hỏi của tôi là, tại sao nó không trả lại giá trị? Đây là mã mẫu tôi đã viết ra để tránh phải sao chép và dán các phần lớn mã không liên quan.Trả lại không trả về giá trị biến

#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

Mã đó đơn giản loại bỏ giá trị trả lại. Hãy thử thay đổi 'test();' thành 'std :: cout << testing();' và xem bạn có nhận được gì không. –

+1

Hàm 'testing' thực sự trả về một giá trị. Nhưng bạn chỉ cần loại bỏ giá trị đó trong cuộc gọi. Bạn đã mong đợi điều gì xảy ra? –

+1

* "Đây là mã mẫu tôi đã viết để tránh phải sao chép và dán các phần lớn mã không liên quan." * - Và chúng tôi cảm ơn bạn vì điều đó. –

Trả lời

9

Thực tế, hàm trả về giá trị. Tuy nhiên, main() đang chọn bỏ qua giá trị trả về đó.

Hãy thử như sau trong main() của bạn:

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

Mã của bạn là hoàn hảo nhưng nó không có giá trị đang được trả về bởi hàm testing() Hãy thử điều này,
này sẽ tổ chức các dữ liệu mà đang được được trả lại bởi hàm 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

Hàm này trả về một giá trị. Bạn không hiển thị giá trị trả lại trên màn hình để đó là lý do tại sao bạn cho rằng nó không trả lại giá trị

3

Return không tương đương với print. Nếu bạn muốn giá trị hàm đã trả về để hiển thị thành stdout, bạn phải có phương thức làm điều đó. Này được thực hiện bằng cách in các giá trị đã được trả về bằng std::cout<< điều hành hoặc trong chính hoặc trong chức năng tự

4

testing()không trở lại một giá trị, nhưng giá trị không được sử dụng hoặc lưu bất cứ nơi nào. Bạn là using std :: cout, std :: cin, std :: endl, v.v. nhưng bạn không phải là sử dụng chúng. Tôi giả sử những gì bạn muốn làm là hiển thị total. Một chương trình cho rằng sẽ trông như thế:

#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; 
} 

gì đang xảy ra trong mã của bạn được (giả sử các trình biên dịch không tối ưu hóa trong bất kỳ cách nào) bên main(), testing() được gọi, đi qua hướng dẫn của nó, và sau đó là chương trình tiến lên. Điều tương tự cũng xảy ra nếu bạn gọi printf từ <cstdlib>. printf là nghĩa vụ phải trả về số ký tự nó hiển thị, nhưng nếu bạn không lưu trữ kết quả bất cứ nơi nào nó chỉ hiển thị văn bản và chương trình vẫn tiếp tục.

Điều tôi phải hỏi là tại sao bạn lại thực sự sử dụng số điện thoại using? Hay đây không phải là mã hoàn chỉnh?

+0

Không phải mã hoàn chỉnh. – ExpletiveDeleted

+0

@ExpletiveDeleted Ah, được rồi, tôi sẽ nói rằng bạn đang sử dụng rất nhiều thứ mà bạn chưa bao giờ thực sự sử dụng. –

Các vấn đề liên quan