2017-10-05 114 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; 
}