Jak działa funkja cin.peek() w poniższym kodzie

0

Szukałem w internecie informacji jak odwrócić liczbę które są oddzielone spacją i znalazłem to. I chciałem sie zapytać jak ten kod w ogóle działa i za co odpowiada funkcja cin.peek() . Jeśli ktoś by mi wytłumaczył byłbym bardzo wdzięczny.

#include <iostream>
using namespace std;

void funkcja()
{
if(cin.peek()=='\n')
return;
int liczba;
cin>>liczba;
funkcja();
cout<<liczba<<" ";
}

int main()
{
funkcja();
return 0;
}

0

Szukałem w internecie informacji jak odwrócić liczbę które są oddzielone spacją i znalazłem to

Skoro potrafisz korzystac juz z google to dlaczego sobie nie sprawdziles?

int peek();
Peek next character
Returns the next character in the input sequence, without extracting it: 
0

Masz całą stronę w dokumentacji opisane co robi ta funkcja. Wystarczy wejść i poczytać. Nikt nie będzie tego tutaj przepisywał.

http://www.cplusplus.com/reference/istream/istream/peek/

0

Nie może, bo funkcja z void nic nie zwraca.

0

Okey , ale dalej nie rozumiem jak funkcja if(cin.peek()=='\n') return; wyswietla liczby od konca a nie od poczatku

1
FilipITT napisał(a):

Szukałem w internecie informacji jak odwrócić liczbę które są oddzielone spacją i znalazłem to.

Nie sądzisz, ze doczytać dok i napisać samemu jest SZYBCIEJ i PROŚCIEJ niż jakiś szemrany kod, prawdopodobnie od kogoś, kto ma skila więcej o miesiąc od ciebie.
Do "pożyczania" kodu z internetu trzeba być znacznie lepszym, niż do pisania.

1
FilipITT napisał(a):

Szukałem w internecie informacji jak odwrócić liczbę które są oddzielone spacją i znalazłem to. I chciałem sie zapytać jak ten kod w ogóle działa i za co odpowiada funkcja cin.peek() . Jeśli ktoś by mi wytłumaczył byłbym bardzo wdzięczny.

#include <iostream>
using namespace std;

void funkcja()
{
    if(cin.peek()=='\n')
        return;
    int liczba;
    cin>>liczba;
    funkcja();
    cout<<liczba<<" ";
}

int main()
{
    funkcja();
    return 0;
}

Ten kod działa przez przypadek.
Wystarczy nie nieco inne dane wejściowe (brak znaku końca linii, niepoprawna liczba) i mamy stack overflow.
Tak samo wystarczy spacja na końcu linii i kod zachowuje się zupełnie inaczej niż powinien.

Niby wejście to samo, a 4 różne wyniki: https://godbolt.org/z/M17rjb

Jakie dokładnie jest twoje zadanie i jakie znacznie ma znak końca linii?

2

No to skoro takie jest zadanie: https://pl.spoj.com/problems/TABLICA/
to ten pomysł powinien wyglądać tak:

void funkcja()
{
    int liczba;
    if (std::cin >> liczba) {
        funkcja();
        std::cout << liczba << " ";
    }
}

https://godbolt.org/z/Wqx1v1

0

@MarekR22: Dzięki za pomoc , oto właśnie mi chodziło

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