Nieokreślona liczba znaków w strumieniu, EOF, program ciągle czekający

0

Witam.
Próbując zrobić zadanie: pl.spoj.pl/problems/STOS/ napisałem taki program:

#include <iostream>
using namespace std;

int main()
{
    int stack[10];
    short pt = 0;
    
    while(cin.peek() != EOF)
    {
             string next;
             next = cin.peek();
             if(next == "+")
             {
                  cin.ignore(1);
                  if(pt > 9) cout << ":(\n";
                  else
                  {
                      cin >> stack[pt++];
                      cout << ":)\n";
                  }
             }
             else if(next == "-")
             {
                  cin.ignore(1);
                  if(pt < 1) cout << ":(\n";
                  else
                  {
                      cout << stack[pt--] << endl;
                  }
             }
    }
} 

Jednak sprawdzarka pokazuje przekroczenie limitu czasu, a sprawdzając go ręcznie zauważyłem, że po podaniu pierwszego znaku program zaczyna czekać na coś, przy czym nie można tego nijak anulować niż wyłączyć go. Gdzie jest błąd?

0
#include <iostream>
using namespace std;

int main()
{
    int stack[10];
    short pt = 0;
    char next;
    while(cin >> next)
    {
             if(next == '+')
             {
                  if(pt == 10) cout << ":(\n";
                  else
                  {
                      cin >> stack[pt++];
                      cout << ":)\n";
                  }
             }
             else if(next == '-')
             {
                  if(pt == 0) cout << ":(\n";
                  else
                  {
                      cout << stack[--pt] << endl;
                  }
             }
    }
}
0

Hm, dziękuję za gotowe rozwiązanie, ale jednak bardziej mnie interesuje, dlaczego mój program działa źle?

0

Jakbyś grzecznie użył debuggera, to byś widział co jest nie tak. Po każdym znaku zostaje znak nowej linii, zgadnij co się stanie jak cin.peek() zwróci \n ? ;)

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