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

Problem z while

Ostatnio zmodyfikowano 2014-07-06 18:19
Autor Wiadomość
killermannnnn
Temat założony przez niniejszego użytkownika
Problem z while
» 2014-07-05 20:45:12
Cześć, napisałem sobie taka funkcje  która ma sprawdzać czy wpisany znak jest liczbą.

Problem w tym że jak nie wpisze liczby to wywala mi cały czas zawartość petli i nie pyta o wprowadzenie liczby. Czemu

   
C/C++
int x, y;

cout << "Wprowadz pierwsza liczbe: ";

while( !( cin >> x ) )
{
    cout << "To nie jest liczba!";
    cout << "Wprowadz pierwsza liczbe: ";
    cin >> x;
}

I tutaj cały kod:

C/C++
#include <iostream>
#include <windows.h>
#include <ctype.h>
#include <cstdio>
#include <conio.h>

using namespace std;

int main()
{
   
    for(;; )
    {
        int x, y;
       
        cout << "Wprowadz pierwsza liczbe: ";
       
        while( !( cin >> x ) )
        {
            cout << "To nie jest liczba!";
            cout << "Wprowadz pierwsza liczbe: ";
            cin >> x;
        }
       
        cout << "Wprowadz druga liczbe: "; cin >> y;
       
        cout << "Wybierz jedn¹ z opcji: " << endl;
        cout << "1. Dodawanie." << endl;
        cout << "2. Odejmowanie." << endl;
        cout << "3. Dz=zielenie." << endl;
        cout << "4. Mnozenie." << endl;
        cout << "5. Zamknij program." << endl;
       
        char wybor;
        wybor = getch();
       
        switch( wybor )
        {
        case '1':
            {
                cout << "Wynik dodawania: " << x + y;
                cout << endl;
                break;
            }
        case '2':
            {
                cout << "Wynik odejmowania: " << x - y;
                cout << endl;
                break;
            }
        case '3':
            {
                cout << "Wynik dzielenia: " << x / y;
                cout << endl;
                break;
            }
        case '4':
            {
                cout << "Wynik mnozenia: " << x * y;
                cout << endl;
                break;
            }
        case '5': exit( 0 );
            default:
            {
                cout << "Nie ma takiej opcji w menu !!!";
                cout << endl;
                break;
            }
        }
        getchar();
        getchar();
        system( "cls" );
    }
}
P-113338
pekfos
» 2014-07-05 20:54:05
Nie czyścisz strumienia.
P-113340
killermannnnn
Temat założony przez niniejszego użytkownika
» 2014-07-06 10:40:08
Chodzi o cos takiego?
C/C++
while( !( cin >> x ) )
{
    cin.clear();
    cout << "To nie jest liczba!";
    cout << "Wprowadz pierwsza liczbe: ";
    cin >> x;
}

Bo ciągle nie działa...
P-113364
Jacob99
» 2014-07-06 12:42:04
C/C++
while( !( cin >> x ) )
{
    cout << "To nie jest liczba!";
    cout << "Wprowadz pierwsza liczbe: ";
    cin >> x;
    cin.clear();
    cin.sync();
}

Strumień czyści się po wczytywaniu.
P-113374
pekfos
» 2014-07-06 13:51:45
C/C++
while( !( cin >> x ) )
{
    cout << "To nie jest liczba!";
    cout << "Wprowadz pierwsza liczbe: ";
    cin >> x;
    cin.clear();
    cin.sync();
}

Strumień czyści się po wczytywaniu.
Wytłumacz jeszcze, po co tam te drugie wczytywanie, które i tak nic nie wczyta..
P-113382
Jacob99
» 2014-07-06 15:51:49
@Pekfos
Ja nie ingerowałem w to co on napisał, tylko pokazałem jak to ma wyglądać, żeby działało.
P-113388
pekfos
» 2014-07-06 18:19:40
jak to ma wyglądać
To nie ma tak wyglądać. Chyba nie rozumiemy się, o czym mowa
C/C++
while( !( cin >> x ) )
{
    cout << "To nie jest liczba!";
    cout << "Wprowadz pierwsza liczbe: ";
    cin >> x; // <- co to ma być?
    cin.clear();
    cin.sync();
}
Cały blok tej pętli jest 'po wczytaniu'.
P-113393
« 1 »
  Strona 1 z 1