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

Czytanie znaku i liczb za jednym zamachem?

Ostatnio zmodyfikowano 2010-12-30 23:27
Autor Wiadomość
Vercevales
Temat założony przez niniejszego użytkownika
Czytanie znaku i liczb za jednym zamachem?
» 2010-12-30 18:52:57
Nie wiem czy dokładnie nakreślę swój problem, ale postaram się.

http://wklej.org/id/447579/

Chcę, aby po pokazaniu się komunikatu "Podaj liczbę do zapisu lub naciśnij n, jeżeli nie chcesz kontynuować: " program decydował, czy nie zapisywać, czy zapisać liczbę na tablicę.

W obecnym wydaniu wyskakuje komunikat "Podaj liczbę do zapisu lub naciśnij n, jeżeli nie chcesz kontynuować: ", po którym gdy nacisnę n, to nie zapisuje niczego. OK
o to chodzi.

Problem zaczyna się, gdy chcę podać cyfrę od razu do zapisania. Wtedy muszę ją dwa razy podawać, gdyż za pierwszym razem traktuje ją jako getch(), a dopiero za drugim razem strumień wejścia ją wyłapuje jako tą do zapisu.

Chcę, aby ten program zapisywał liczby (liczba, enter, liczba, enter itd) do czasu naciśnięcia guzika "n".
Tak tak, wiem, że mogę sobie sprawdzić czy podana liczba nie jest "n", i w zależności od tego kontynuować lub nie.
ALE ja chcę aby tam był getch(), sprawdzenie tego znaku.

Naciskam "n" idzie dalej, bez zapisywania do tablicy, nie naciskam, od razu traktuje podaną liczbę jako tą do zapisu.

Pomóżcie, pamiętając, że jestem dopiero raczkujący i nie znam jeszcze wielu rzeczy.

PS. Przepraszam, że na wklej.org dałem źródło, lecz nie wiem jak ta tym forum je umieścić ^^
P-25958
DejaVu
» 2010-12-30 19:03:57
Nie da się zrobić jednocześnie obsługi getch() oraz std::cin>> by w zależności od wciśniętego znaku dane trafiały w jedno lub drugie miejsce. Ty dokładnie to chcesz osiągnąć z tego co zrozumiałem. Musisz albo zdecydować się na std::cin albo na getch() i w tym momencie będziesz zmuszony do napisania odpowiedniego kodu, który będzie potrafił obsłużyć dwa przypadki jednocześnie.
P-25960
Vercevales
Temat założony przez niniejszego użytkownika
» 2010-12-30 20:04:36
Szkoda.
Musi więc zostać tak jak jest.
Myślałem, że da się zrobić takie cuda :D
P-25966
malan
» 2010-12-30 22:11:38
Co byś powiedział, na coś takiego:
C/C++
#include <conio.h>
#include <iostream>
#include <sstream>
#include <vector>

const char KEY_ENTER = 13;

int stringToInt( const std::string & str )
{
    int val = 0;
    std::istringstream iss( str );
    iss >> val;
    return val;
}

int main()
{
    char input;
    std::string number;
    std::vector < int > numbers;
   
    while( true )
    {
        input = getch();
       
        std::cout << input;
       
        if( input >= '0' && input <= '9' ) number += input;
        else
             if( input == 'n' ) break;
        else
        if( input == KEY_ENTER && number.size() )
        {
            std::cout << std::endl;
           
            numbers.push_back( stringToInt( number ) );
            number.clear();
        }
    }
   
    for( std::vector < int >::iterator it = numbers.begin(); it != numbers.end(); ++it )
         std::cout << * it << std::endl;
   
    return 0;
}
...?
P-25977
Vercevales
Temat założony przez niniejszego użytkownika
» 2010-12-30 23:27:11
Dziękuję, ale póki co jestem na tym etapie nauki, że niewiele z tego rozumiem ^^

Dziękuję raz jeszcze za pomoc :)
P-25986
« 1 »
  Strona 1 z 1