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

Zadanie 12.6 Problem ze sprawdzaniem liczb (wpisanych kilku cyfr)

Ostatnio zmodyfikowano 2010-05-02 00:02
Autor Wiadomość
Minor
Temat założony przez niniejszego użytkownika
Zadanie 12.6 Problem ze sprawdzaniem liczb (wpisanych kilku cyfr)
» 2010-05-01 17:14:41
Standardowo zrobiłem zadanie kolejne, najbardziej zgodnie z wzorcem działania jak się dało, ale mam jeden problem.

Mój program sprawdza czy wpisana została liczba czy litera i wyswietla odpowiedni komunikat... Do tego sprawdza czy liczba jest przypisana do menu. Dokąd wpisuje tylko jedna wartość to jakos to dziala, ale kiedy wpisze np 34 to wyswietli mi sie menu pod numerkiem 3 (formalnie powinno nastepnie wyświetlic sie menu pod numerem 4, ale tu poradziłem sobie czyszcząc wartosci w cin).

Szukam podpowiedzi jak można wyswietlić komunikat o błednej liczbie, kiedy wpisuje 2,3 czy 10 cyfrowa liczbe. Próbowałem kbhit() ale nic z tego nie uzyskałem.

Mój kod:
C/C++
#include <iostream>
#include <ctime>
#include "ddtconsole.h"
#include <cctype>
#include <conio.h>

using namespace ddt::console;
using namespace std;

int main()
{
    char select;
    float min;
    int zamek;
    int selected;
   
    char tab[ 10 ][ 10 ][ 150 ] =
    { //menu
        { { "Administrowanie forum DDT" },
            { "1. Czytaj logi" },
            { "2. Usun temat" },
            { "3. Lista oczekujacych prac" },
            { "4. Pauza" },
            { "5. Koniec" } },
        //komunikat
        { { "Co wybierasz szefie? " },
            { "Wybrales bledny numer!!" },
            { "Wpisales litere. Podaj liczbe!" },
            { "Ile czasu ma trwac pauza w minutach " },
            { "Wlasnie zaczela sie przerwa, bedzie trwac " },
            { " sek." },
            { "Przerwa skonczona, do roboty!" },
            { "Koniec na dzis!" },
            { "Program wylaczy sie za " } },
        //logi
        { { "16 styczen 2008 00:01 - atak SYN flooding IP 99.99.99.1" },
            { "20 maj 2008 14:13 - uzytkowanik Macius700, blad logowania" },
            { "31 lipiec 2008 20:09 - aktualizacja kursy Allegro" },
            { "5 sierpien 2008 17:29 - zarejestrowal sie uzytkownik Mapet" } },
        //deltopic
        { { "Tematy przeznaczone do usunecia" },
            { "1. GroupId = 191" },
            { "2. GroupId = 163" },
            { "3. GroupId = 671" } },
        //work
        { { "1. Dokumentacja." },
            { "2. Artykuly." },
            { "3. Dzial Pliki." },
            { "4. Sygnatury zamkniecia by Dante." } }
    };
   
   
    gotoxy( 26, 1 ); cout << tab[ 0 ][ 0 ];
   
    textcolor( 11 );
    gotoxy( 20, 2 ); cout << tab[ 0 ][ 1 ];
   
    gotoxy( 20, 3 ); cout << tab[ 0 ][ 2 ];
   
    gotoxy( 45, 2 ); cout << tab[ 0 ][ 3 ];
   
    gotoxy( 45, 3 ); cout << tab[ 0 ][ 4 ];
   
    gotoxy( 45, 4 ); cout << tab[ 0 ][ 5 ] << endl;
   
    do
    {
        selected = 0;
        cout << tab[ 1 ][ 0 ];
        cin >> select;
        cin.sync(); //czysczenie pamieci
       
        if( isdigit( select ) ) //zmiana char w liczby
        {
            if( select == '1' )
                 selected = 1;
           
            if( select == '2' )
                 selected = 2;
           
            if( select == '3' )
                 selected = 3;
           
            if( select == '4' )
                 selected = 4;
           
            if( select == '5' )
                 selected = 5;
           
        };
       
        switch( selected )
        {
        case 1: //logi
            cout << tab[ 2 ][ 0 ] << endl
            << tab[ 2 ][ 1 ] << endl
            << tab[ 2 ][ 2 ] << endl
            << tab[ 2 ][ 3 ] << endl << endl;
            break;
           
        case 2: //tematy
            cout << tab[ 3 ][ 0 ] << endl
            << tab[ 3 ][ 1 ] << "\t" << tab\3 ][ 2 ] << "\t" << tab[ 3 ][ 3 ] << endl << endl;
           
            break;
           
        case 3: //works
            cout << tab[ 4 ][ 0 ] << "     " << tab[ 4 ][ 1 ] << endl
            << tab[ 4 ][ 2 ] << "      " << tab[ 4 ][ 3 ] << endl << endl;
            break;
           
        case 4: //pauza
            cout << tab[ 1 ][ 3 ];
            ( cin >> min ).get();
            clock_t start = clock();
            cout << tab[ 1 ][ 4 ] << min * 60 << tab[ 1 ][ 5 ] << "\a\n";
            while( clock() - start < min * 60 * CLOCKS_PER_SEC )
                ;
           
            cout << tab[ 1 ][ 6 ] << "\a\n" << endl;
            break;
           
        case 5: //zakonczenie
            cout << tab[ 1 ][ 7 ] << endl;
            for( int i = 5; i > 0; i-- )
            {
                cout << tab[ 1 ][ 8 ] << i << tab[ 1 ][ 5 ] << "\a\n";
                start = clock();
                while( clock() - start < 1 * CLOCKS_PER_SEC )
                    ;
               
            }
            zamek = 5;
            break;
           
            default: //info o podaniu zlej liczby lub wpisaniu litery
            if( isdigit( select ) )
                 cout << tab[ 1 ][ 1 ] << endl << endl;
            else
                 cout << tab[ 1 ][ 2 ] << endl << endl;
           
            break;
           
        };
       
    } while( zamek != 5 );
   
   
    return 0;
}
P-16474
Drraven
» 2010-05-01 18:23:04
zrób zwijany kod !!!
P-16478
Minor
Temat założony przez niniejszego użytkownika
» 2010-05-01 20:09:49
Nie znam znaczników odpowiedzialnych za to... nawet szukałem na forum ale nic nie znalazłem..

Co nie zmienia faktu, że jeżeli nie masz nic do powiedzenia na temat problemu to nie pisz i tyle..
P-16484
Elaine
» 2010-05-01 20:16:39
[code src="C++" zwin]tu kod[/code] jeśli dobrze pamiętam. Jeśli faktycznie byś poszukał, to byś znalazł...
P-16485
Minor
Temat założony przez niniejszego użytkownika
» 2010-05-01 20:44:26
Dziękuję...

A teraz jeżeli można to wróćmy do tematu. Jeżeli ktoś by chciał podpowiedzieć to chętnie posłucham.
P-16486
lenrokskate
» 2010-05-01 21:14:42
może zamiast char użyj string wtedy sprawdzisz długość poprzez lenght() czy coś takiego
P-16487
Minor
Temat założony przez niniejszego użytkownika
» 2010-05-01 21:48:45
tak, tylko że wtedy nie ma możliwości skorzystania z biblioteki ctype.. już próbowałem z łancuchami jakoś, ale daną wejściowa do sprawdzania czy znak czy liczba musi byc char inaczej wywala bledy.
P-16488
DejaVu
» 2010-05-02 00:02:55
1) Długość łańcucha znaków w stylu C można uzyskać za pomocą funkcji strlen(napis).
2) Łańcuch w stylu C z klasy std::string można uzyskać poprzez wywołanie metody c_str().
3) Nawiązując do treści pytania:
C/C++
for( int liczba = 0; liczba < 1 || liczba > 5; cin >> liczba )
{
    cin.clear();
    cin.sync();
} //for
P-16489
« 1 »
  Strona 1 z 1