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

Lekcja 2.16

Ostatnio zmodyfikowano 2016-07-16 21:13
Autor Wiadomość
carlosmay
» 2016-07-16 13:33:28
@Anonim47
Zrobiłem to jako nieskończoną pentle
C/C++
do { //kod
} while( true );

Teraz widać, że jest to nieskończona pętla.

@CCbolt
jak napisać program aby nie zliczał strzałów z poza zakresu liczb dozwolonych
Czytaj przykład.
jak zabezpieczyć program aby poprawnie wypisywał komunikat że litera to nie liczba.
Dodać do pętli sprawdzanie zawartości bufora strumienia wejściowego (nagłówek <cctype> zawiera potrzebne funkcje)
przed oczyszczeniem go.
P-150022
Szymon2727
» 2016-07-16 14:15:00
A nie lepiej to zrobić iostreamem? Tam dało się sprawdzić czy podano liczbę czy literę.
P-150024
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-07-16 18:24:57
@Szymon2727 Na pierwszej stronie w kolejnym poście mam podany przykład problemu.

Podaj liczbe: a
Litery to nie liczby
Podaj liczbe: A
Liczba jest niewlaciwa
Liczba jest za mala
Podaj liczbe: b
Litery to nie liczby
Podaj liczbe: b
Liczba jest niewlaciwa
Liczba jest za mala

Pewnie w rozwiązaniu @carlosmay ten problem nie wystąpi ale w moim jest, pewnie da się to naprawić ale teraz nie widzę rozwiązania.
P-150033
carlosmay
» 2016-07-16 20:05:48
pewnie da się to naprawić ale teraz nie widzę rozwiązania.
Rozwiązanie jest proste. Wykrywaj tylko czy prawidłowo przebiegło pobieranie danych od użytkownika.
Rozpoznawanie nieprawidłowych danych nie ma większego sensu w tym przypadku.

Jak będę miał chwilę to coś wyskrobię.
Sugestia:
std::cin.get() do pobrania znaku, który spowodował błąd.
isalpha() funkcja sprawdzająca, czy dany znak to litera.
Można też sprawdzić ręcznie kod pobranego znaku i porównać go z tabelą znaków ASCII.

edit:
Na podstawie fragmentu twojego kodu:
C/C++
#include <iostream>
#include <limits>
#include <locale> // lub <cctype>. <locale> zawiera <cctype>
using namespace std;

int main()
{
    int liczba;
    bool A;
   
    cout << "Podaj liczbe: ";
    cin >> liczba;
    A = cin.good();
   
    if( A == false ) {
        do
        {
            cin.clear();
            if( isalpha( cin.get() ) ) {
                cout << "Litery to nie liczby" << endl;
            }
            else {
                cout << "Podales cos jeszcze innego niz litery" << endl;
            }
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
           
            cout << "Podaj ponownie liczbe : ";
            cin >> liczba;
            A = cin.good();
        } while( A == false );
       
    }
    cout << "Liczba to " << liczba << endl;
}
Tylko nie wiem czy warto tak kombinować.
P-150037
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-07-16 21:13:16
OOO o to mi chodziło, dzięki.
Wiesz im więcej kombinuję tym więcej zapamiętuję, szukam, przestawiam i widzę co i jak się zachowuje a to trochę daje przynajmniej w moim przypadku. Jakkolwiek ilekroć coś zrobię mam chęć zobaczyć jak program zachowuje się gdy nie postępuję wedłóg poleceń a gdy to zrobię ciśnie mnie aby to poprawić.
P-150042
1 « 2 »
Poprzednia strona Strona 2 z 2