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
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.