2017-10-05 22 views
5

Tôi có chương trình C++ nơi tôi cần lặp qua chuỗi và in các ký tự. Tôi nhận được đầu ra chính xác nhưng cùng với đầu ra tôi nhận được một số giá trị rác (giá trị rác là 0). Tôi không biết tại sao tôi có được những giá trị đó? Bất cứ ai có thể giúp tôi với điều đó?Lặp lại qua chuỗi C++

#include <iostream> 

using namespace std; 

int number_needed(string a) { 
    for(int i=0;i<a.size();i++) 
    { 
     cout<<a[i]; 
    } 
} 

int main(){ 
    string a; 
    cin >> a; 
    cout << number_needed(a) << endl; 
    return 0; 
} 

mẫu Input

hi 

Output

hi0 
+6

hãy biên dịch mã của bạn với '-Wall' hoặc với'/W3' và đừng bỏ qua những cảnh báo , bạn sẽ thấy vấn đề sau đó. Cảm ơn! – Rakete1111

+3

'number_needed' tên không có gì để làm với những gì nó làm. –

+0

'number_needed()' _should_ được khai báo là 'number_needed (chuỗi const & a)' --- nếu không bạn đang _copying_ chuỗi không cần thiết. –

Trả lời

2

Vấn đề là với dòng này:

cout << number_needed(a) << endl;

Thay đổi nó để chỉ:

number_needed(a);

Vấn đề là number_needed() được xuất ra từng chữ cái của chuỗi, nhưng sau đó, bạn đang xuất ra giá trị trả về bởi number_needed(), đó là 0.

+5

Nó không phải là 0, nó là hành vi không xác định. – Rakete1111

+0

Phần lớn điều này không đúng với tôi. Tại sao bạn trả về giá trị trả về bằng không? –

+2

@SebastianJohnHoward: Anh ấy nói rằng giá trị trả về là 0, vì đó là những gì được in_. Tất nhiên, Rakete1111 có một điểm hợp lệ rằng đó là hành vi không xác định. Bất cứ điều gì _might_ đã xảy ra, nhưng chúng ta có thể giả định rằng máy tính không thực sự bắt lửa. – MSalters

5

Hành vi của chương trình của bạn là không xác định. number_needed là một hàm không phải là void do đó cần một giá trị return rõ ràng trên tất cả các đường dẫn điều khiển chương trình.

Rất khó để biết bạn muốn cout ở số main để in. Đánh giá bằng văn bản câu hỏi của bạn, bạn cũng có thể thay đổi kiểu trả về của number_needed-void, và điều chỉnh main để

int main(){ 
    string a; 
    cin >> a; 
    number_needed(a); 
    cout << endl; // print a newline and flush the buffer. 
    return 0; 
}