Asahel Temat założony przez niniejszego użytkownika |
przerwanie wczytywania danych, po napotkania '-' lub naciśnięciu enter » 2015-09-28 13:55:32 Weźmy zmienną typu string nazwa ,którą wczytujemy cin >> nazwa . Chciałbym aby operacja wczytywania został przerwana po napotkaniu '-' lub naciśnięciu klawisza Enter. Próbowałem komendy: getline( cin, nazwa, '-' )
Problem z tym rozwiązaniem jest taki, że tutaj naciśniecie klawisza enter nie zatrzyma operacji wczytywania. Jakiś pomysł :(? |
|
carlosmay |
» 2015-09-28 14:46:55 getch() |
|
michal11 |
» 2015-09-28 15:26:55 string tekst; while( getline( strumien, tekst ) ) { if( tekst[ tekst.length() - 1 ] == '-' ) { break; } }
Możesz powiedzieć do czego takie rozwiązanie jest ci potrzebne ? |
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-09-28 15:29:52 Gdzie to getch() umieścić? Próbowałem napisać funkcję znak(), która w odpowiednim momencie jak naciśniemy '-' albo enter ='\n' zwróci nam tą wartość do funkcji getline, ale to nie działa. char znak() { char b; b = getch(); if( b == '-' ) { return b; } else if( b == '\n' ) { return b; } else { return 'none'; } }
int main() { char a; getline( cin, a, znak() ) }
chodzi o to, aby funkcja getline automatycznie przestała wpisywać dane do zmiennej char a po nacisnieciu na klawiaturze '-' lub enter. michal11, rozwiązuję zadanie http://pl.spoj.com/problems/WI_DATY/. Dane podane w postaci binarnej łatwiej mi przekonwertować na zapis rrr-mm-dd gdy są stringiem. Natomiast gdy konwertuję z rrr-mm-dd to łatwiej gdy mam int. Tym samym tworzę 4 zmienne. Jedną string i trzy int. Nie mozna przewidziec co podana uzytkownik, dlatego jak w którymś momencie pojawi się '-' to oznacza, że mamy do czynienia z zapisem rrr-mm-dd i to co zapisało się do stringa przekonweruję na int. A jak nie napotka to zostaje w stringu. Enter jest potrzebny aby program mógł wykonywać dalsze linie kodu. Takie rozwiązanie wydawało mi się najszybsze. Bardzo przekombinowane, ale gdyby od razu zapisywać wszystko do stringa, to chyba program wykonywałby się dłużej i byłoby jeszcze więcej kombinowania... |
|
michal11 |
» 2015-09-28 16:13:25 Daj spokój. Wczytuj całą linijkę jako string (np. getline'em). find() - tym wyszukaj myślnik w tekście. Jak jest to prosta sprawa, substr() podziel tekst na paczki po 7, 4 i 5 bitów i konwertuj je na dec, w ten sposób otrzymasz 3 liczby. Jeżeli znajdzie myślnik to wtedy robisz podobnie tylko musisz tak dobrać argumenty substringa, żeby pobierać odpowiednią ilość cyfr ale pominąć myślniki, konwersję string na int można zrobić stoi(), jeżeli nie zadziała to atoi() razem z c_str() albo istringstream i funkcją str(), tak otrzymaną liczbę musisz już tylko przekonwertować na bin i na końcu scalić 3 otrzymane teksty z reprezentacją bitową twojej daty. Dodatkowo w funkcji stoi() możesz wybrać podstawę przy konwersji, to cię może zwolnić z pisania własnej funkcji dec2bin i bin2dec. Oczywiście musisz pamiętać o sprawdzaniu czy dane nie są błędne, ale to już zostawię tobie wymyślenia. |
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-09-28 16:17:03 wielkie dzięki Michał :) A czy da się napisać coś podobnego na wzór funkcji znak() z czwartego postu, która sterowałaby funkcją getline(cin,tekst,znak())
|
|
michal11 |
» 2015-09-28 16:33:43 Prawdopodobnie nie, ale nie mam pewności, z tym, że po co coś takiego wymyślać ? |
|
« 1 » |