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

po wyjsciu z petli zmienna przyjmuje wartosc 1 pomimo innej wartości źródłowej

Ostatnio zmodyfikowano 2014-09-28 18:53
Autor Wiadomość
groosik
Temat założony przez niniejszego użytkownika
po wyjsciu z petli zmienna przyjmuje wartosc 1 pomimo innej wartości źródłowej
» 2014-09-28 17:26:08
Ktoś pomoże? Wklejam kawałek kodu:

  
C/C++
cout << "Legenda:" << endl << "[1] - dodawanie" << endl << "[2] - odejmowanie" << endl << "[3] - mnozenie" << endl << "[4] - dzielenie" << endl << endl << "Wprowadz liczbe odpowiadajaca danemu dzialaniu: ";
cin >> znak;
cin.clear();
cin.sync();


if( !( znak =( 1 || 2 || 3 || 4 ) ) )
do
{
    cout << "Blad. Wprowadz wartosc z zakresu 1-4: ";
    cin >> znak;
    cin.clear();
    cin.sync();
} while( !( znak =( 1 || 2 || 3 || 4 ) ) ); // po wyjsciu z tej petli znak przyjmuje wartość 1, a powinien mieć taką jaką mu wprowadzono

cout << "znak: " << znak;



W razie potrzeby tutaj jest cały program:

C/C++
#include <iostream>
using namespace std;
int main()
{
    int a, b, znak, wynik;
    bool good, good2;
   
   
    cout << "podaj pierwsza liczbe: ";
    cin >> a;
    good = cin.good();
    cin.clear();
    cin.sync();
   
    if( good != 1 )
    do
    {
        cout << "Blad! Podaj wartosc liczbowa: ";
        cin >> a;
        good = cin.good();
        cin.clear();
        cin.sync();
    } while( good != 1 );
   
   
    cout << "Legenda:" << endl << "[1] - dodawanie" << endl << "[2] - odejmowanie" << endl << "[3] - mnozenie" << endl << "[4] - dzielenie" << endl << endl << "Wprowadz liczbe odpowiadajaca danemu dzialaniu: ";
    cin >> znak;
    cin.clear();
    cin.sync();
   
   
    if( !( znak =( 1 || 2 || 3 || 4 ) ) )
    do
    {
        cout << "Blad. Wprowadz wartosc z zakresu 1-4: ";
        cin >> znak;
        cin.clear();
        cin.sync();
    } while( !( znak =( 1 || 2 || 3 || 4 ) ) ); // po wyjsciu z tej petli znak przyjmuje wartość 1
   
    cout << "znak: " << znak;
    cout << "Podaj druga liczbe: ";
    cin >> b;
    good2 = cin.good();
    cin.clear();
    cin.sync();
   
    if( good2 != 1 )
    do
    {
        cout << "Blad! Podaj wartosc liczbowa: ";
        cin >> b;
        good2 = cin.good();
        cin.clear();
        cin.sync();
    } while( good2 != 1 );
   
    else
   
    switch( znak )
    {
    case 1:
        wynik = a + b;
        cout << "Wynik:" << a << "+" << b << "=" << wynik;
        break;
       
    case 2:
        wynik = a - b;
        cout << "Wynik:" << a << "-" << b << "=" << wynik;
        break;
       
    case 3:
        wynik = a * b;
        cout << "Wynik:" << a << "*" << b << "=" << wynik;
        break;
       
    case 4:
        cout << "Wynik:" << a << "/" << b << "=" << wynik;
        wynik = a / b;
        break;
    }
   
    return 0;
}
P-117723
kubawal
» 2014-09-28 17:49:36
Jaka zmienna? Po której pętli?
P-117725
pekfos
» 2014-09-28 18:11:20
C/C++
if( !( znak =( 1 || 2 || 3 || 4 ) ) )
Mylisz operatory i wymyślasz sobie struktury języka. Ten warunek jest zawsze fałszywy i przypisuje 1 do znak.
P-117728
groosik
Temat założony przez niniejszego użytkownika
» 2014-09-28 18:49:48
dzięki za pomoc, znalazłem błąd i poprawiłem. Wydaje mi się, że wszystko działa, oprócz jednej rzeczy. Mianowicie, gdy korzystam z dzielenia wyrzuca mi strasznie dziwne wartości. Oto kod:

C/C++
#include <iostream>
using namespace std;
int main()
{
    int a, b, znak;
    float wynik;
    bool good, good2;
   
   
    cout << "podaj pierwsza liczbe: ";
    cin >> a;
    good = cin.good();
    cin.clear();
    cin.sync();
   
    if( good != 1 )
    do
    {
        cout << "Blad! Podaj wartosc liczbowa: ";
        cin >> a;
        good = cin.good();
        cin.clear();
        cin.sync();
    } while( good != 1 );
   
   
    cout << "Legenda:" << endl << "[1] - dodawanie" << endl << "[2] - odejmowanie" << endl << "[3] - mnozenie" << endl << "[4] - dzielenie" << endl << endl << "Wprowadz liczbe odpowiadajaca danemu dzialaniu: ";
    cin >> znak;
    cin.clear();
    cin.sync();
   
    if(( znak == 1 || znak == 2 || znak == 3 || znak == 4 ) == 0 )
    do
    {
        cout << "Blad. Wprowadz wartosc z zakresu 1-4: ";
        cin >> znak;
        cin.clear();
        cin.sync();
    } while(( znak == 1 || znak == 2 || znak == 3 || znak == 4 ) == 0 );
   
    cout << "Podaj druga liczbe: ";
    cin >> b;
    good2 = cin.good();
    cin.clear();
    cin.sync();
   
    if( good2 != 1 )
    do
    {
        cout << "Blad! Podaj wartosc liczbowa: ";
        cin >> b;
        good2 = cin.good();
        cin.clear();
        cin.sync();
    } while( good2 != 1 );
   
   
    switch( znak )
    {
    case 1:
        wynik = a + b;
        cout << "Wynik:" << a << "+" << b << "=" << wynik;
        break;
       
    case 2:
        wynik = a - b;
        cout << "Wynik:" << a << "-" << b << "=" << wynik;
        break;
       
    case 3:
        wynik = a * b;
        cout << "Wynik:" << a << "*" << b << "=" << wynik;
        break;
       
    case 4:
        cout << "Wynik:" << a << "/" << b << "=" << wynik;
        wynik = a / b;
        break;
    }
   
    return 0;
}
P-117732
pekfos
» 2014-09-28 18:53:12
C/C++
cout << "Wynik:" << a << "/" << b << "=" << wynik;
wynik = a / b;
Bo wypisujesz wynik przed zapisaniem tam wartości.
P-117734
« 1 »
  Strona 1 z 1