Przekazywanie jednej funkcji wartości zwracanej przez drugą - dziwne problemy

0

Kod w wersji #1. http://ideone.com/Wrx8iG

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
 
struct huge {vector<char>num; huge();};
huge::huge(){num.reserve(101);for(int i=0;i<100;++i) num.push_back(0);}
 
inline huge stoh(string input)
{
    huge res;
    for(int i=input.size()-1;i>=0;--i)
        res.num[101-input.size()+i]=int(input[i]-'0');
    return res;
}
 
inline huge read(void)
{
    string res;
    while(!isdigit(cin.peek())) cin.ignore();
    char hlp=cin.get(); while(isdigit(hlp)) {res+=hlp; hlp=cin.get();}
    return stoh(res);
}
 
inline string out(huge output)
{
    int i=0; while(output.num[i]==0) ++i;
    string res; for(;i<101;++i) res+=char('0'+output.num[i]);
    return res;
}
 
int main()
{
    cout << out(read());
    //huge a=read(); cout << out(a);
    return 0;
}

Wejście:
700
Wyjście:
700Tak jak powinno być.

Wersja #2. http://ideone.com/dLQVw3

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
 
struct huge {vector<char>num; huge();};
huge::huge(){num.reserve(101);for(int i=0;i<100;++i) num.push_back(0);}
 
inline huge stoh(string input)
{
    huge res;
    for(int i=input.size()-1;i>=0;--i)
        res.num[101-input.size()+i]=int(input[i]-'0');
    return res;
}
 
inline huge read(void)
{
    string res;
    while(!isdigit(cin.peek())) cin.ignore();
    char hlp=cin.get(); while(isdigit(hlp)) {res+=hlp; hlp=cin.get();}
    return stoh(res);
}
 
inline string out(huge output)
{
    int i=0; while(output.num[i]==0) ++i;
    string res; for(;i<101;++i) res+=char('0'+output.num[i]);
    return res;
}
 
int main()
{
    //cout << out(read());
    huge a=read(); cout << out(a);
    return 0;
}

Wejście:
700Tak samo.
Wyjście:
70) (???)

Jest to dla mnie totalnie niepojęte. Obie wersje tego samego kodu różnią się tylko i wyłącznie tym, że w wersji 1 wynik funkcji read() jest przekazywany bezpośrednio do funkcji out(), a w wersji 2 za pośrednictwem zmiennej a.

Co jest, czy funkcja read() działa inaczej, gdy przekazuje wynik innej funkcji, a inaczej, gdy zapisuje go do zmiennej?

Co robię nie tak?

Z góry dzięki.

1

W linijce 14, przekraczasz rozmiar wektora, przez co nie da się tego sprawdzić.

0

O matko... Znowu moje ogromne gapiostwo.

Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1