zwracanie znaku do wczytania

0

Piszę program, który ma z wejścia wczytać SYMBOL(który jest nowym typem danych) i zakończyć się w przypadku podania na wejście znaku CTRL+D.

Próbowałem zrobić coś takiego przy pomocy funkcji getch() i ungetch().

Znak co prawda jest pobierany przez funkcję getch() i "znika" z terminala ale funkcja ungetch() już go tam nie wrzuca.
Chciałbym, żeby było to tak zrobione, żebym mógł wprowadzić coś takiego: a+b=c (wszystko jest już oprogramowane, z wyjątkiem tego, kiedy "a" nie jest symbolem tylko znakiem CTRL+D) i najpierw zostałby wczytany znak a i jeśli nie jest on CTRL+D to zostaje zwrócony i następnie zostaje jakby znowu wczytany tylko, że tym razem do zmiennej, która jest typu SYMBOL a nie jak w pierwszym przypadku char.

Ktoś ma pomysł i może mnie naprowadzić?

1

Potrzebujesz zwykłe prymitywne: while(cin>>value) { }
Z tym że dla SYMBOL musisz poprawnie zrealizować: istream &operator>>(istream &in,SYMBOL &s)

0

Jeśli zrobię coś takiego

 while(cin>>SYMBOL)

Jak dobrze rozumiem, będzie się wykonywało tylko raz kiedy wczytamy SYMBOL a kilka razy, aż nie dojdziemy do SYMBOLu kiedy podamy coś innego. Ale chodziło mi o to, że program ma sam rozróżnić czy to co dajemy na wejściu jest SYMBOLEM czy znakiem. Ew jak sprawdzić jaki był kod znaku, który wywołał, że cin>>SYMBOL


zwróciło 0?
0

Piszesz że SYMBOL to typ danych, czy uważasz że takie coś: while(cin>>int) {} przejdzie?
cin>>value zwróci false wtedy kiedy odczyt się nie powiódł np w związku z naciśnięciem <Ctrl+D>

0

tę część rozumiem, przez pisanie SYMBOL miałem na myśli, że podajemy coś, co jest rzeczywiście SYMBOLEM, chodzi o to, że program ma się przerwać tylko wtedy, kiedy podamy CTRL+D a nie między innymi wtedy. W innych wypadkach program wypisuje, że podane błędne dane.

1
while(cin>>value) {}
if(cin.eof()) cout<<"<ctrl+D>"<<endl;
else cout<<"nie udało się wczytać"<<endl;
0

Problem w tym, że eof daje mi CTRL+C a nie CTRL+D

0

Nie, <ctrl-c> przerywa program definitywnie, nie ma już dalej żadnego odczytu. Owszem można zmienić tak aby program nie reagował na <ctrl-c>

0

Kiedy daje CTRL+D przy kodzie, który dałeś wyżej wyskakuje mi "nie udało się wczytać" a przy CTRL+C na ułamek sekundy pokazuje się "<ctrl+D>"

1

Pewnie przestawiłeś sobie kody stty:
http://unix.stackexchange.com[...]oes-ctrl-d-eof-exit-the-shell

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