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

Wczytywanie komend z poziomu konsoli

Ostatnio zmodyfikowano 2017-03-23 08:48
Autor Wiadomość
ultra
Temat założony przez niniejszego użytkownika
Wczytywanie komend z poziomu konsoli
» 2017-03-22 09:15:13
Cześć,
Mam pytanie, w jaki sposób najlepiej zrobić wczytywanie komend z poziomu konsoli? Teraz mam to zrobione za pomocą tablicy znaków, przechwytuję znak po znaku i wywołuję polecenia. Niestety, nie działa to prawidłowo ponieważ:

1. jeśli chcę wczytać liczbę, to rozbija mi to na znaki
2. czasami jest tak, że jest podana liczba, a następnie komenda. teraz mam zrobione w ten sposób, że jak wczyta liczbę to wykona akcję, a powinno jeszcze sprawdzić jakie jest polecenie. polecenie może być po jednej lub dwóch liczbach. np:
- 21 z - zdejmij 21 z stosu
- 10 2 z - zdejmij 10 i 2 z stosu

C/C++
int main()
{
    char * komenda = new char[ 10 ];
   
    Stosik * stack;
    stack = NULL;
   
    while( scanf_s( " %c", komenda ) )
    {
        //cyfry
        if( * komenda >= 48 && * komenda <= 57 )
        {
            push( stack, * komenda );
        }
       
        //komenda
        if( * komenda == 112 )
        {
            pop( stack );
        }
       
    }
   
    delete komenda;
   
    return 0;
}
P-159216
maly7
» 2017-03-22 17:36:16
Wczytuj zawsze jako liczbę i sprawdzaj czy wczytało prawidłowo, jeśli nie znaczy, że wczytało znak.
Przykład:
C/C++
int i = 0;
char c = 0;
printf( "Podaj liczbe lub komende: " );
if( scanf( "%d", & i ) )
     printf( "Wczytano liczbe %d\n", i );
else if( scanf( "%c", & c ) )
     printf( "Wczytano znak %c\n", c );
P-159235
pekfos
» 2017-03-22 18:23:04
jak wczyta liczbę to wykona akcję, a powinno jeszcze sprawdzić jakie jest polecenie. polecenie może być po jednej lub dwóch liczbach. np:
- 21 z - zdejmij 21 z stosu
- 10 2 z - zdejmij 10 i 2 z stosu
Jeśli wiesz, co zdejmiesz ze stosu, to po co ten stos?
P-159237
1aam2am1
» 2017-03-22 20:28:44
Wczytuję całą linię, podziel ją (informacje rozdzielone spacja) i zostaje kwestia tylko przetworzenia informacji.
P-159240
ultra
Temat założony przez niniejszego użytkownika
» 2017-03-22 20:49:40
@maly7, to się raczej nie sprawdzi, muszę sprawdzać w while, cze jest wprowadzane polecenie

@pekfos, muszę to zrobić na stosie, takie życie, co poradzić :(

@1aam2am1, Ok, czyli kumam, że mam skorzystać z fgets. Pytanie brzmi, w jaki sposób mam podzielić tego stringa? Całość zapisywać do tablicy charów?
P-159242
1aam2am1
» 2017-03-22 22:22:29
Wszystko zależy co chcesz zrobić.
Jeżeli wiesz że na samym końcu masz komendę. Wyszukaj od końca spacje. Wczytaj komendę i po kolei od początku do komendy masz swoje dane. Co komenda ma z nimi zrobić to piszesz w komendzie. Możesz powtarzać komendę dla następnych składników np. liczb lub coś innego. Wszystko zależy od implementacji.

PS. Poczytaj o strtok
P-159244
ultra
Temat założony przez niniejszego użytkownika
» 2017-03-23 08:48:55
@1aam2am1, o dzięki, coś takiego szukałem. wczytywanie komendy znakowej zrobiłem za pomocą strcmp, wydaje mi się, że jest to bardziej oszczędne pamięciowo i wydajne.
P-159254
« 1 »
  Strona 1 z 1