Czytanie z przeładowanego strumienia

0

Witam, mam problem z wypisywaniem charów ze strumienia, podawane przeze mnie argumenty są typu enum Symbol={a,b,c}, program przyjmuje też znaki innego typu, ale już podczas wypisywania tych innych wywala błąd(tzn. nie wypisuje i pokazuje Segmentation fault. Co robić?

0

wklej co masz, będzie łatwiej fixnąć mi lub komu innemu

0

Przeładowane strumienie:

 istream & operator>> (istream & strmwej, Symbol & sym)
{
  char   znak_symbolu;
  Symbol tablica_symboli[]={a,b,c,d,e};
    strmwej >> znak_symbolu;
  if(strchr("abcde",znak_symbolu)){
	  sym=tablica_symboli[znak_symbolu-'a'];
  }
  else{	
	  strmwej.unget();
	  strmwej.setstate(ios::failbit);
  }
  return strmwej;
}
ostream & operator<<(ostream & strmwyj, Symbol &sym){
	const char *tab[]={"e","a","b","c","d"};
	strmwyj<<tab[sym];
	return strmwyj;
}

i w skrócie:
Wczytywanie:
np a+b=c

 cin>>arg1>>oper>>arg2>>rown>>wynik;

Wypisywanie:

 cout<<arg1<<oper<<arg2<<rown<<wynik;<

A gdy wpisze a+b=r, to wtedy się sypie przy wyświetlaniu.

0

bo zapominasz sprawdzić:

if(cin>>arg1>>oper>>arg2>>rown>>wynik) cout<<arg1<<oper<<arg2<<rown<<wynik;
else
  {
   cout<<"Błąd wczytywania"<<endl;
   cin.clear();
   while(cin.get()!='\n') {}
  }
0

Zapomniałem napisać, że ma mi również wyświetlać wyrażenie z błedem.

0

Zapomniałeś pomyśleć że ostream & operator<<(ostream & strmwyj, Symbol &sym) jest przeznaczony tylko i wyłącznie do wyświetlania enum'a Symbol
Nic innego nie jest w stanie wyświetlić, ani 'r' ani '#' ani '+'.

0

oper i rown jest typu char. Wiem o tym, że nie może wyświetlić, ale próbowałem to jakoś obejść, ale jeszcze raz spojrzałem w zadanie i okazało się że byłem nadgorliwy i wyświetlania wyrażenia ze złymi argumentami nie powinno być.
Sory za zajęty czas.

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