2017-10-05 17 views
5

Mam program C++, w którym potrzebuję do iteracji ciągu znaków i drukowania znaków. Dostaję poprawne dane wyjściowe, ale wraz z wyjściem otrzymuję niektóre wartości śmieci (wartość śmieci wynosi 0). Nie wiem, dlaczego dostaję te wartości? Czy ktoś może mi w tym pomóc?Iterowanie za pomocą ciągu znaków 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; 
} 

próbki wejściowe

hi 

Wyjście

hi0 
+6

Proszę skompilować kod z '-Wall' lub'/W3' i nie ignorować ostrzeżeń wtedy zobaczysz problem. Dzięki! – Rakete1111

+3

'number_needed' nazwa nie ma nic wspólnego z tym, co robi. –

+0

'number_needed()' _should_ powinno być zadeklarowane jako 'number_needed (string const & a)' --- w przeciwnym razie niepotrzebnie niepoprawnie ciąga łańcuch. –

Odpowiedz

2

Problem jest z tej linii:

cout << number_needed(a) << endl;

zmienić go po prostu:

number_needed(a);

Problemem jest to, że jest wyprowadzanie number_needed() każdej litery napisu, ale po tym, jesteś wyprowadzanie wartość zwracana przez number_needed(), czyli 0.

+5

Nie musi to być 0, jest to niezdefiniowane zachowanie. – Rakete1111

+0

Większość z tego nie wygląda mi na poprawną. Dlaczego sposób zwracania wartości wynosi zero? –

+2

@SebastianJohnHoward: Mówi, że zwrócona wartość wynosi zero, ponieważ to jest to, co zostało wydrukowane. Oczywiście Rakete1111 ma ważny punkt, że jest niezdefiniowanym zachowaniem. Coś, co się wydarzyło, ale możemy spokojnie założyć, że komputer się nie zapalił. – MSalters

5

Zachowanie programu jest undefined. number_needed jest funkcją inną niż void, dlatego potrzebuje wyraźnej wartości return na wszystkich ścieżkach sterowania programem.

Trudno wiedzieć, co chcesz wydrukować, aby uzyskać cout w main. Sądząc po tekście zapytania, można również zmienić typ zwracanej number_needed do void i dostosować main do

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