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

Jak zabronić wpisywania liter w programie

Ostatnio zmodyfikowano 2014-02-02 14:35
Autor Wiadomość
damianlxlx5
Temat założony przez niniejszego użytkownika
Jak zabronić wpisywania liter w programie
» 2014-01-13 17:37:44
Witam

Jestem nowy na tym forum i od jakichś 2 może 3 tygodni uczę się programowania lecz nie do końca mi to dobrze wychodzi.W końcu postanowiłem napisać taki dosyć prosty programik który pomnoży dwie dowolne liczby i zwróci wynik jeżeli suma tych liczb nie będzie większa niż 100 tak sobie wymyśliłem.No ale do rzeczy program ten udało mi się prawie że zrealizować ale mam pewien problem z jedną rzeczą i nie wiem do końca jak ja rozwiązać.Chodzi oto że chciałbym zabronić użytkownikowi wpisywania liter w moim programie zamiast cyfr ponieważ program ten mnoży tylko liczby całkowite i jak się wpisze jakąś litere to program się natychmiastowo gubi.Wydaje mi się że należało by w tym wypadku zrobić kolejną instrukcje warunkową "if" ale nie wiem co już dalej należy napisać by kompilator kodu wiedział że chodzi o litery.Oto mój dotychczasowy kod programu:
C/C++
#include <iostream>
#include <windows.h>
using namespace std;
main()

{
    int liczba, cyfra;
    float suma;
    M: cout << "Wprowadz liczbe calkowita" << endl;
    cin >> liczba;
    cout << "Wprowadz druga liczbe calkowita" << endl;
    cin >> cyfra;
    suma = liczba * cyfra;
    if( suma < 100 )
   
    {
       
        cout << "Suma dwoch liczb ktore podales nie przekracza 100" << endl;
        cout << "Wynik mnozenia tych dwoch liczb wynosi : " << suma << endl;
        cout << "Znakomicie" << endl;
        Sleep( 2000 );
        goto M;
       
       
    }
    else
    {
        cout << "Suma liczb przekracza 100" << endl;
        cout << "Wynik nie zostanie zwrocony" << endl;
        cout << "Sprobuj ponownie" << endl;
        Sleep( 2000 );
        goto M;
    }
   
   
}
Bardzo proszę o pomoc.
P-102092
pekfos
» 2014-01-13 17:39:27
P-102093
damianlxlx5
Temat założony przez niniejszego użytkownika
» 2014-01-13 17:56:03
Szczerze mówiąc to dalej nie bardzo wiem jak to zrobić.Napisałem coś takiego:
C/C++
#include <iostream>
#include <windows.h>
using namespace std;
main()

{
    int liczba, cyfra;
    float suma;
    M: std::cout << "Wprowadz liczbe calkowita" << endl;
    std::cin >> liczba;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    std::cout << "Wprowadz druga liczbe calkowita" << endl;
    std::cin >> cyfra;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    suma = liczba * cyfra;
    if( suma < 100 )
   
    {
       
        std::cout << "Suma dwoch liczb ktore podales nie przekracza 100" << endl;
        std::cout << "Wynik mnozenia tych dwoch liczb wynosi : " << suma << endl;
        cout << "Znakomicie" << endl;
        Sleep( 2000 );
        goto M;
       
       
    }
    else
    {
        cout << "Suma liczb przekracza 100" << endl;
        cout << "Wynik nie zostanie zwrocony" << endl;
        cout << "Sprobuj ponownie" << endl;
        Sleep( 2000 );
        goto M;
    }
   
   
}
Jednak program nie wykonuje tego jakie było moje założenie.Mógłbyś napisać jak by to musiało wyglądać ?
P-102096
pekfos
» 2014-01-13 18:08:12
Zastanów się, zamiast kopiować przykłady.
C/C++
std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
Więc wiesz, czy coś nawaliło. Wykorzystaj tę informację, by wczytywać tak długo, aż nie nawali.. lub zakończyć program, czy co tam rozumiesz przez "zabranianie".
P-102098
damianlxlx5
Temat założony przez niniejszego użytkownika
» 2014-01-13 18:21:20
Ale nie wiem jak mam wykorzystać tą informację iż nigdy takiego czegoś nie robiłem :(
A poza tym nie da się napisać jakiejś instrukcji typu "if" , która by uniemożliwiała wypisywanie liter ?
P-102100
Sevet
» 2014-01-13 20:14:28
Ja osobiście polecam pętle do{}while()
W {} wpisujesz kod który każe wczytać do zmiennej zawartość strumienia cin(znaki z klawiatury) a w () warunek kiedy ma skończyć wczytywać(np kiedy niema błędów i wczytanie powiodło się)
Jakbyś dalej nie wiedział jak to zrobić:
C/C++
bool good, bad;
float x;
do
{
    cin >> x;
    good = cin.good();
    bad = cin.bad();
    cin.clear();
    cin.sync();
} while(( good == 0 ) ||( bad == 1 ) );

P-102109
damianlxlx5
Temat założony przez niniejszego użytkownika
» 2014-01-15 14:05:56
Witam instrukcja którą mi podałeś działa tylko jest jeden malutki problem.Otóż jak wpiszę jakąś litere to po jej wpisaniu pokazuje się zdanie "Wprowadz druga liczbe calkowita" i pozniej "Wprowadz liczbe calkowite".Jak zrobić że po wpisaniu przez kogoś błędnej odpowiedzi na to pytanie czyli jeżeli użytkownik wpiszę literę zamiat liczby żeby pojawiło mu się tylko to pierwsze zdanie "Wprowadz liczbe calkowita" no bo po co ma mu się wyświetla drugi tekst skoro żle wykonał założenia programu.Bardzo bym prosił o pomoc oraz dokładną instrukcję jak to napisać aby działało wszystko dobrze.
Dodam jeszcze mój kod:

#include <iostream>
#include <windows.h>
using namespace std;
main ()

{   bool good, bad;
    float liczba,cyfra;
    float suma ;

do
{   M: cout << "Wprowadz liczbe calkowita" << endl;
    cin >> liczba  ;
    cout <<"Wprowadz druga liczbe calkowita" <<endl;
    cin >> cyfra  ;

    suma =liczba * cyfra ;
    good = cin.good();
    bad = cin.bad();
    cin.clear();
    cin.sync();
} while(( good == 0 ) ||( bad == 1 ) );


    if (suma < 100)

    {

        cout << "Suma dwoch liczb ktore podales nie przekracza 100" <<endl;
        cout <<  "Wynik mnozenia tych dwoch liczb wynosi : " <<suma<< endl;
        cout << "Znakomicie" <<endl;
        Sleep(2000) ;
        goto M;


    }
     else
    {
        cout << "Suma liczb przekracza 100" <<endl;
        cout << "Wynik nie zostanie zwrocony" <<endl;
        cout << "Sprobuj ponownie" <<endl;
        Sleep(2000) ;
        goto M;
    }


}
P-102221
alixir
» 2014-01-15 14:15:21
Dla każdej pobieranej zmiennej musisz stworzyć osobną pętlę sprawdzającą. Nie możesz tego załatwić jedną pętlą.
P-102224
« 1 » 2 3 4 5 6
  Strona 1 z 6 Następna strona