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

Rozdział 2.17 problem z ćwiczeniem praktycznym

Ostatnio zmodyfikowano 2018-07-12 22:35
Autor Wiadomość
rogerpl
Temat założony przez niniejszego użytkownika
Rozdział 2.17 problem z ćwiczeniem praktycznym
» 2018-07-09 00:48:43
witam, po wpisaniu niepoprawnego znaku więcej jak jeden raz a następnie wpisanie poprawnej liczby w działaniu program zawiesza się lub przyjmuje złe wartości
C/C++
#include "stdafx.h"
#include <iostream>
using namespace std;

void moja_funkcja()
{
    cout << "[1] - dodawanie" << endl;
    cout << "[2] - odejmowanie" << endl;
    cout << "[0] - wyjscie z programu" << endl;
}

void dodawanie()
{
    float a, b;
    int c = 2;
    cout << "podaj pierwszą liczbę: ";
    cin >> a;
   
    do //coś jest nie tak z tą pętlą                       
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj pierwszą liczbę: ";
            cin >> a;
            if( cin.fail() ) { c = 1; }
        }
    } while( c == 1 );
   
    cout << "podaj drógą liczbę: ";
    cin >> b;
   
    do //coś jest nie tak z tą pętlą
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj drógą liczbę: ";
            cin >> b;
            if( cin.fail() ) { c = 1; }
        }
    } while( c == 1 );
   
    cout << a << " + " << b << " = " << a + b << endl;
}

void odejmowanie()
{
    float a, b;
    int c = 2;
    cout << "podaj pierwszą liczbę: ";
    cin >> a;
   
    do //coś jest nie tak z tą pętlą
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj pierwszą liczbę: ";
            cin >> a;
            if( cin.fail() ) { c = 1; }
        }
    } while( c == 1 );
   
    cout << "podaj drógą liczbę: ";
    cin >> b;
   
    do //coś jest nie tak z tą pętlą
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj drógą liczbę: ";
            cin >> b;
            if( cin.fail() ) { c = 1; }
        }
    } while( c == 1 );
   
    cout << a << " - " << b << " = " << a - b << endl;
}

int main()
{
    setlocale( LC_ALL, "polish" );
    int liczba;
   
    do
    {
        system( "cls" );
        cout << "W programie są dostępne następujące opcje:" << endl;
        moja_funkcja();
        cout << "Życzę przyjemnego korzystania z programu" << endl << endl;
       
        cin >> liczba;
       
        switch( liczba )
        {
        case 1:
            dodawanie();
            break;
        case 2:
            odejmowanie();
            break;
           
            default:
            break;
        }
        if( liczba == 0 ) break;
       
        system( "pause" );
    } while( liczba != 0 );
   
   
    return 0;
}
program jest pisany w Visual Studio 2017
P-171787
rogerpl
Temat założony przez niniejszego użytkownika
» 2018-07-09 02:36:59
problem raczej znalazłem ale sprawdzę to dopiero wieczorem czy wszystko działa
C/C++
do
{
    if( cin.fail() )
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout << "nie poprawny znak!!!\n\n";
        cout << "podaj pierwszą liczbę: ";
        cin >> a;
        if( cin.fail() ) { c = 1; }
        else { c = 2; } // zapomniałem o tym :D
    }
} while( c == 1 );

P-171788
rogerpl
Temat założony przez niniejszego użytkownika
» 2018-07-12 21:24:52
po dokonaniu poprawki błąd nadal występuje ale tylko w przypadku drugiej wartości, po trzeciej próbie wpisania złej wartości pętla zostaje przerwana i w zmiennej zostaje zapisana błędna wartość, może mi koś z tym pomóc lub udzielić jakiejś wskazówki?
P-171826
pekfos
» 2018-07-12 21:28:43
Jak wygląda kod?
P-171828
rogerpl
Temat założony przez niniejszego użytkownika
» 2018-07-12 21:31:25
C/C++
#include <iostream>
using namespace std;

void moja_funkcja()
{
    cout << "[1] - dodawanie" << endl;
    cout << "[2] - odejmowanie" << endl;
    cout << "[0] - wyjscie z programu" << endl;
}

void dodawanie()
{
    float a, b;
    int c = 2;
    cout << "podaj pierwszą liczbę: ";
    cin >> a;
    do
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj pierwszą liczbę: ";
            cin >> a;
            if( cin.fail() ) { c = 1; }
            else { c = 2; } //  POPRAWKA
        }
    } while( c == 1 );
   
    cout << "podaj drógą liczbę: ";
    cin >> b;
    do
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj drógą liczbę: ";
            cin >> b;
            if( cin.fail() ) { c = 1; }
            else { c = 2; } //  POPRAWKA
        }
    } while( c == 0 );
   
    cout << a << " + " << b << " = " << a + b << endl;
}

void odejmowanie()
{
    float a, b;
    int c = 0;
    cout << "podaj pierwszą liczbę: ";
    cin >> a;
    do
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj pierwszą liczbę: ";
            cin >> a;
            if( cin.fail() ) { c = 1; }
            else { c = 2; } //  POPRAWKA
        }
    } while( c == 1 );
   
    cout << "podaj drógą liczbę: ";
    cin >> b;
    do
    {
        if( cin.fail() )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "nie poprawny znak!!!\n\n";
            cout << "podaj drógą liczbę: ";
            cin >> b;
            if( cin.fail() ) { c = 1; }
            else { c = 2; } //  POPRAWKA
        }
    } while( c == 1 );
   
    cout << a << " - " << b << " = " << a - b << endl;
}

int main()
{
    setlocale( LC_ALL, "polish" );
    int liczba;
   
    do
    {
        system( "cls" );
        cout << "W programie są dostępne następujące opcje:" << endl;
        moja_funkcja();
        cout << "Życzę przyjemnego korzystania z programu" << endl << endl;
       
        cin >> liczba;
       
        switch( liczba )
        {
        case 1:
            dodawanie();
            break;
        case 2:
            odejmowanie();
            break;
           
            default:
            break;
        }
        if( liczba == 0 ) break;
       
        system( "pause" );
    } while( liczba != 0 );
   
   
    return 0;
}

P-171829
pekfos
» 2018-07-12 21:46:32
C/C++
} while( c == 0 );

Dlaczego zero?
P-171830
rogerpl
Temat założony przez niniejszego użytkownika
» 2018-07-12 22:02:53
błąd, już poprawiam, dzięki :D
P-171834
rogerpl
Temat założony przez niniejszego użytkownika
» 2018-07-12 22:04:51
dzięki, wszystko już działa :)
P-171835
« 1 » 2
  Strona 1 z 2 Następna strona