2017-10-05 117 views
5

我有一個C++程序,我需要通過一個串進行迭代和打印的字符。我得到正確的輸出,但隨着輸出,我得到了一些垃圾值(垃圾值爲0)。我不知道爲什麼我會得到這些價值?任何人都可以幫助我嗎?迭代通過串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; 
} 

樣品輸入

hi 

輸出

hi0 
+6

請'-Wall'或'/ W3'編譯代碼,不要忽略警告,那麼你會看到問題。謝謝! – Rakete1111

+3

'number_needed'這個名字與它的功能無關。 – 2017-10-05 19:08:45

+0

'number_needed()'_應該被聲明爲'number_needed(string const&a)'---否則你會不必要地複製字符串。 –

回答

2

問題是這一行:

cout << number_needed(a) << endl;

更改它只是:

number_needed(a);

問題是number_needed()是輸出字符串的每個字母,但在這之後,你輸出由number_needed()返回的值,這是0

+5

它不一定是0,它是未定義的行爲。 – Rakete1111

+0

大部分情況對我來說都不正確。你爲什麼返回的值是零? –

+2

@ SebastianJohnHoward:他的意思是返回的值爲零,因爲這是printed_。當然,Rakete1111有一個有效的觀點,那就是Undefined Behavior。任何事情都可能發生,但我們可以放心地認爲電腦並沒有真正着火。 – MSalters

5

你的程序的行爲undefinednumber_needed是非void函數,因此它需要在所有程序控制路徑上明確的return值。

這是很難知道要在maincout打印什麼。通過你的問題的文字來看,你不妨改變number_needed返回類型void,並調整main

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