Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

przerwanie wczytywania danych, po napotkania '-' lub naciśnięciu enter

Ostatnio zmodyfikowano 2015-09-28 16:33
Autor Wiadomość
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:
C/C++
getline( cin, nazwa, '-' )

Problem z tym rozwiązaniem jest taki, że tutaj naciśniecie klawisza enter nie zatrzyma operacji wczytywania. Jakiś pomysł :(?

P-137987
carlosmay
» 2015-09-28 14:46:55
getch()
P-137988
michal11
» 2015-09-28 15:26:55
C/C++
string tekst;
while( getline( strumien, tekst ) )
{
    if( tekst[ tekst.length() - 1 ] == '-' )
    {
        break;
    }
}

Możesz powiedzieć do czego takie rozwiązanie jest ci potrzebne ?
P-137991
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.

C/C++
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...
P-137993
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.
P-137995
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())
P-137996
michal11
» 2015-09-28 16:33:43
Prawdopodobnie nie, ale nie mam pewności, z tym, że po co coś takiego wymyślać ?
P-137997
« 1 »
  Strona 1 z 1