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

[Rozdział 17] Zadanie 1

Ostatnio zmodyfikowano 2015-11-21 19:14
Autor Wiadomość
Matis28
Temat założony przez niniejszego użytkownika
[Rozdział 17] Zadanie 1
» 2015-11-21 13:51:38
Cześć, właśnie próbuję rozwiązać zadanie 1 z rozdziału 17 jednak mam duży problem.Oto mój kod:
C/C++
#include "stdio.h"
#include <iostream>
using namespace std;
int wczytajLiczbe()
{
    int a;
    bool x;
    do {
        cin >> a;
        x = cin.good();
    } while( x != 1 );
   
    return a;
}

int main()
{
   
    cout << "Podaj liczbe: ";
    int liczba = wczytajLiczbe();
    cout << "Podales liczbe: " << liczba << endl;
    system( "pause" );
    return 0;
}
chciałem aby w funkcji wczytajLiczbe() program pytał użytkownika tak długo aż poda właściwą wartość a on zamiast ponownie pytać użytkownika zacina się.
P-140489
Rashmistrz
» 2015-11-21 14:48:22
} while( x != 1 );

U ciebie tą właściwą liczbą jest 1,
a powinna być każda liczba całkowita.

» Kurs C++ » Poziom 1Obsługa strumienia wejściowego lekcja
W razie wpisania tekstu program się zacina,
bo nie czyścisz bufora, a tekst tam zostaje
i próbowany jest wczytanie go do zmiennej.

Nie zapomnij o czyszczeniu flag.
P-140490
Matis28
Temat założony przez niniejszego użytkownika
» 2015-11-21 18:14:43
ok zmodyfikowałem kod ale dalej nie działa teraz wyrzuca w kółko "podano nieprawidlowa wartosc!"

C/C++
#include "stdio.h"
#include <iostream>
using namespace std;
int wczytajLiczbe()
{
    int a;
    do {
        cin.clear();
        cin.sync();
        cin >> a;
        if( cin.good() != true )
        {
            cout << "podano nieprawidlowa wartosc!" << endl;
        }
    } while( cin.good() != true );
   
    return a;
}

int main()
{
   
    cout << "Podaj liczbe: ";
    int liczba = wczytajLiczbe();
    cout << "Podales liczbe: " << liczba << endl;
    system( "pause" );
    return 0;
}
P-140499
Monika90
» 2015-11-21 18:28:31
C/C++
#include <iostream>
#include <limits>

int main()
{
    using namespace std;
    int liczba;
    cout << "Podaj liczbe: ";
    while( !( cin >> liczba ) )
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout << "To nie liczba, podaj liczbe: ";
    }
   
    cout << "Podano " << liczba << endl;
}
Czy to działa?
P-140501
Matis28
Temat założony przez niniejszego użytkownika
» 2015-11-21 18:42:04
Twój kod działa :) Byłabyś w stanie wyjaśnić mi dlaczego mój nie?
P-140502
carlosmay
» 2015-11-21 18:45:47
C/C++
std::cin.sync()
 już nie czyści strumienia, do tego służy
C/C++
std::cin.ignore()
P-140503
Matis28
Temat założony przez niniejszego użytkownika
» 2015-11-21 18:58:37
Mam jeszcze jedno nurtujące mnie pytanie. Czy da się jakoś wyczyścić cały bufor od razu? Bo teraz program po wpisaniu ciągu liter zamiast liczby działa ale za każdy znak wyświetla się jedna linia "podano nieprawidlowa wartosc!"
P-140504
carlosmay
» 2015-11-21 19:09:35
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
 Monika90 napisała kod czyszczący cały bufor, do znaku nowej linii.
P-140506
« 1 » 2
  Strona 1 z 2 Następna strona