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

Problem z ćwiczeniem 12.6

Ostatnio zmodyfikowano 2010-05-03 22:02
Autor Wiadomość
Comandoraf
Temat założony przez niniejszego użytkownika
Problem z ćwiczeniem 12.6
» 2010-05-03 20:01:19
Mam taki probelm ;] Napisałem programik taki jak w ćwiczeniu 12.6 (w kursie).
Nie wiem jednak co zrobić, żeby program sprawdzał, czy wpisany znak jest liczbą. Chciałem iść na skróty i po prostu dałem, żeby wyświetlał zdanie : "Nie ma takiej opcji" jeśli wprowadzony znak nie mieści się w zakresie 1-5. Niestety działa to tylko w połowie. O ile wpisuję liczbę to normalnie wyskakuje wiadomość i program prosi o ponowne wpisanie komendy. Jeśli natomiast jest to litera albo jakiś znak np. '!' program świruje i, owszem wyświetla informacje, że nie ma takiej opcji, ale nie prosi o ponowne podanie komendy tylko przeskakuje do ostatniego wyboru w switch (5) czyli wyłącza program. Zresztą sami sprawdźcie:

C/C++
#include <iostream>
#include <conio.h>
#include "ddtconsole.h"
#include <ctime>
int main()
{
    using namespace std;
    using namespace ddt::console;
    int kolor = 11;
    char tab1[ 8 ][ 6 ][ 200 ] = {
        { "Co wybierasz szefie?" }, //0
        { { "Administrowanie forum DDT:\n" },
            { "[1]. Czytaj logi\t" },
            { "[3]. Lista oczekujacych prac\n" },
            { "[2]. Usun temat\t" },
            { "[4]. Pauza\n\t" },
            { "[5]. Koniec" } }, //1
        { { "16 Styczen 2008 00:01 - atak SYN flooding IP 99.99.99.1\n" },
            { "20 maj 2008 14:13 - uzytkownik Macius700 blad logowania\n" },
            { "31 lipiec 2008 20:09 - aktualizacja Kursu Allegro\n" },
            { "5 sierpien 2008 17:29 - zarejestrowal sie uzytkownik Mapet\n" } }, //2
        { { "1. GroupId = 191\t" },
            { "2. GroupId = 163\t" },
            { "3. GroupId = 671\n" } }, //3
        { { "1. Dokumentacja." },
            { "2. Artykuly." },
            { "3.Dzial Pliki." },
            { "4.Sygnatury zamkniecia by Dante" } }, //4
        { { "Twoja przerwa wyniesie<w sekundach>: " },
            { "Szefie zrob sobie przerwe, ile potrzebujesz minut?" },
            { "Niestety Twoja przerwa juz minela czas do roboty ; )" } }, //5
        { "Nie ma takiej opcji, sprobuj ponownie." }, //6
        { { "Aplikacja zakonczy dzialanie za <sek>" },
            { "Koniec na dzisiaj do jutra!" } }, //7
    };
    int wybor;
    float minuty;
    gotoxy( 25, 1 );
    cout << tab1[ 1 ][ 0 ];
    textcolor( kolor );
    gotoxy( 20, 2 );
    cout << tab1[ 1 ][ 1 ];
    gotoxy( 45, 2 );
    cout << tab1[ 1 ][ 2 ];
    gotoxy( 20, 3 );
    cout << tab1[ 1 ][ 3 ];
    gotoxy( 45, 3 );
    cout << tab1[ 1 ][ 4 ];
    gotoxy( 45, 4 );
    cout << tab1[ 1 ][ 5 ] << endl;
    do
    {
        cout << tab1[ 0 ][ 0 ];
        cin >> wybor;
        switch( wybor )
        {
        case 1:
            cout << tab1[ 2 ][ 0 ] << tab1[ 2 ][ 1 ] << tab1[ 2 ][ 2 ] << tab1[ 2 ][ 3 ] << endl;
            break;
        case 2:
            cout << tab1[ 3 ][ 0 ] << tab1[ 3 ][ 1 ] << tab1[ 3 ][ 2 ] << endl;
            break;
        case 3:
            cout << tab1[ 4 ][ 0 ] << tab1[ 4 ][ 1 ] << tab1[ 4 ][ 2 ] << tab1[ 4 ][ 3 ] << endl;
            break;
        case 4:
            {
                cout << tab1[ 5 ][ 1 ];
                ( cin >> minuty ).get();
                clock_t koniec = int( minuty * 60 ) * CLOCKS_PER_SEC,
                start = clock();
                cout << tab1[ 5 ][ 0 ] << minuty * 60 << endl;
                while( clock() - start < koniec )
                    ; //bardzo ważny śrdnik
               
                cout << tab1[ 5 ][ 2 ] << endl; }
            break;
        case 5:
            cout << tab1[ 7 ][ 1 ] << endl;
            for( int i = 5; i > 0; i-- )
            {
                clock_t start = clock(), koniec = 1 * CLOCKS_PER_SEC;
                cout << tab1[ 7 ][ 0 ] << i << endl;
                while( clock() - start < koniec );
               
            }
           
            break;
            default:
            cout << tab1[ 6 ][ 0 ] << endl; }
        if( wybor == 5 )
        { clrscr();
            break;
        } } while( wybor = 5 );
   
    return( 0 );
}

No więc jeśli możecie to powiedzcie jak to zrobić, żeby działało tak jak powinno :D i nurtuje mnie pytanie: dlaczego program po wpisaniu litery wykonuje polecenie 5? (wyłącz program) Tego to już w ogóle nie rozumię. W przypadku cyfr działa normalnie. Z góry dziękuję za pomoc
P-16546
DejaVu
» 2010-05-03 20:18:41
Niedawno dawałem rozwiązanie problemu - poczytaj ostatnie tematy na forum.

/edit:
Cóż... w temacie nawet jest ten sam numer ćwiczenia... http://forum.ddt.pl/?Tid=2338
P-16548
Comandoraf
Temat założony przez niniejszego użytkownika
» 2010-05-03 21:07:56
Wprowadziłem poprawki tak, że mój program jest teraz praktycznie taki sam jak użytkownika Minor ;/ i mam ten sam problem co On. Jak wpisuje wielocyforową liczbe to jak sie za czyna od 1,2,3,4 lub 5 to wyswietla dana opcje. A wpatruje sie w Twój post od pół godziny i nie wiem co mam z nim zrobić ;/ mógłbyś trochę jaśniej??
P-16550
DejaVu
» 2010-05-03 22:02:53
Napisz prosty program w którym będzie występował ten kod, przetestuj i spróbuj zrozumieć.
P-16553
« 1 »
  Strona 1 z 1