Praca domowa rozdział 15
Ostatnio zmodyfikowano 2016-11-22 13:06
kirito1996 |
» 2016-09-11 18:03:43 tak jeszcze z ciekawości bo się patrze na ten poprawiony kod i nie daje mi spać po nocach to cin.sync(); i cin.clear() to wystarczy raz w kodzie napisać i działa na cały program ? heh teraz ja mam problem z tym zadaniem ;) mój kod: #include <cstdio> #include <iostream> using namespace std;
int main() { int wynik = 0; float a; float b; int c; bool sukces; do { cout << "obecny wynik to = " << wynik << endl; cin.clear(); cin.sync(); cout << "Podaj liczbe pierwsza = "; cin >> a; sukces = cin.good(); if( a != 0 ) { cout << "podaj liczbe druga = "; cin >> b; } else return 0; if( b != 0 && a != 0 ) { cout << " [1] Dodawania \n [2] Odejmowanie \n [3] mnozenie \n [4] dzielenie \n [5] rezygnuj \n"; cin >> c; switch( c ) { case 1: wynik = a + b; cout << a << " + " << b << " = " << wynik << endl; break; case 2: wynik = a - b; cout << a << " - " << b << " = " << wynik << endl; break; case 3: wynik = a * b; cout << a << " * " << b << " = " << wynik << endl; break; case 4: wynik = a / b; cout << a << " / " << b << " = " << wynik << endl; break; case 5: return 0; break; default: cout << "nie poprawny wybor \n"; } } else return 0; } while( c != 5 || sukces == 0 ); return 0; }
problem jest wtedy gdy zamiast liczby wpisuje literę program po takiej czynności zamyka się a ja chcę żeby zapytał jeszcze raz o liczbę, zrobiłem pierwszą część zadania i w taki sam sposób chciałem zrobić to tutaj ale coś program nie chce mnie słuchać :( okej mam to sorki za spam do { cout << "Podaj liczbe pierwsza = "; cin >> a; sukces = cin.good(); cin.clear(); cin.sync(); } while( sukces == 0 ) rozwiązanie |
|
carlosmay |
» 2016-09-11 19:27:17 nie daje mi spać po nocach |
Żeby nie wpędzać cię w uciążliwe schorzenia związane z bezsennością odpowiadam na pytanie cin.sync(); i cin.clear() |
używamy we wszystkich miejscach, gdzie jest potrzebne. Zabezpieczenie przed wpisywaniem liter |
|
bobby.hl |
kalkulator » 2016-09-14 23:14:42 Witam,
proszę o zerknięcie na kod i powiedzenie mi dlaczego po wpisaniu "0" jako którąś z liczb program nie wyłącza się ??? Gdzie jest błąd? Poza tym wszystko mi działa, ale czy mógłby wypowiedzieć się któryś z moderatorów czy tak miał docelowo dzialac ten kalkulator?
Z góry dzięki.
#include <iostream> using namespace std; int main()
{ int a; int b; int wynik = 0; int dzialanie; bool ok;
do { cout << "Wynik: " << wynik << endl; cout << "Podaj liczbe: "; cin >> a; ok = cin.good(); cin.clear(); cin.sync();
if( ok == 0 ) do { cout << "Podaj poprawna liczbe: "; cin >> a; ok = cin.good(); cin.clear(); cin.sync(); }while( ok == 0 );
cout << "Podaj druga liczbe: "; cin >> b; ok = cin.good(); cin.clear(); cin.sync();
if( ok == 0 ) do { cout << "Podaj poprawna liczbe: "; cin >> b; ok = cin.good(); cin.clear(); cin.sync(); }while( ok == 0 );
cout << "Wybierz dzialanie:" << endl; cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnożenie" << endl; cout << "[4] Dzielenie" << endl; cin >> dzialanie; ok = cin.good(); cin.clear(); cin.sync(); if( ok == 0 || dzialanie < 1 || dzialanie > 4 ) do { cout << "Bledne dzialanie, wybierz ponownie!" << endl; cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnozenie" << endl; cout << "[4] Dzielenie" << endl; cin >> dzialanie; ok = cin.good(); cin.clear(); cin.sync(); } while( ok == 0 || dzialanie < 1 || dzialanie > 4 );
switch( dzialanie ) { case 1: wynik = a+b; break; case 2: wynik = a-b; break; case 3: wynik = a*b; break; case 4: wynik = a/b; break; } }while( a != 0 && b != 0 );
return 0; }
|
|
Micek |
ocena pracy domowej » 2016-11-01 20:47:48 Cześć, napisałem kalkulator i zastanawiam się czy mogę przejść dalej tzn. czy praca domowa zalicznona ?
#include <iostream> using namespace std; int main () { int wynik, liczba, cyfra; wynik = 0; cout << " Podaj liczbe " << endl; cin >> liczba; if(!(cin.good())) return 0; cin.clear(); cin.sync();
if(liczba!=0&&cin.good()) { cout<< " obecny wynik to: " << wynik << endl; cout<< " Wybierz dzialanie "<< endl; cout<< " [1] dodawanie\n [2] odejmownie\n [3] mnozenie\n [4] dzielenie\n [5] rezygnuj" << endl; cin>> cyfra; cin.clear(); cin.sync(); if (cyfra!=0) switch (cyfra) { case 1: cout<< "obecny wynik:"<<liczba+liczba<<endl; break; case 2: cout<<"obecny wynik:"<<liczba-liczba<<endl; break; case 3: cout<<"obecny wynik:"<<liczba*liczba<<endl; break; case 4: cout<<"obecny wynik:"<<liczba/liczba<<endl; break; case 5: return 0; break; default: return 0; }else return 0; } return 0;
}
PS Jak ładnie wstawić widok z CodeBlocks tak jak koledzy wyżej ? |
|
carlosmay |
» 2016-11-01 21:42:33 PS Jak ładnie wstawić widok z CodeBlocks tak jak koledzy wyżej ? |
@Micek Załóż nowy temat i przeczytaj czerwoną ramkę pod pierwszym postem. czy praca domowa zalicznona ? |
Zawsze coś można ulepszyć. Jeśli jednak działa wg oczekiwań, to jest OK. Poprawianie rozwiązań przyjdzie z doświadczeniem. |
|
Dither |
zadanie 15 - wczytanie danych » 2016-11-20 19:06:28 #include <iostream> using namespace std;
int main() { char wybor; float a, b; do { cout << "Podaj liczby a i b: "; do { cin.clear(); cin.sync(); cout << endl << "a = "; cin >> a; if( a = 0 ) { cout << "wyjscie " << endl; return 0; } } while( cin.fail() ); do { cin.clear(); cin.sync(); cout << endl << "b = "; cin >> b; if( b == 0 ) { cout << "wyjscie " << endl; return 0; } } while( cin.fail() ); cout << endl << "wybierz dzialanie [+ - * / 0] "; cin >> wybor; cout << endl << endl; switch( wybor ) { case '0': cout << "wyjscie " << endl; break; case '+': cout << "suma= " << a + b << endl; break; case '-': cout << "roznica= " << a - b << endl; break; case '*': cout << "iloczyn= " << a * b << endl; break; case '/': { if( b != 0 ) cout << "iloraz= " << a / b << endl; else cout << "dzielenie przez zero!" << endl; break; } default: cout << "nie wybrales dzialania [+ - * / 0]" << endl; break; } } while( a != 0 && b != 0 && wybor != '0' ); return 0; }
w tym kodzie chcę mieć taki efekt: 1. przy wpisaniu zmiennej a = "liczba rzeczywista" program przechodzi do realizacji dalszej części kodu 2. przy wpisaniu zmiennej a = 0 program przerywa działanie 3. przy wpisaniu zmiennej a = "błedna wartość np. litera" program powtarza zapytanie o zmienną a. 4. taki sam cykl jeśli chodzi o zmienną b. próbuję to zrealizować warunkami if() : ale jak wpiszę w miejscu zaznaczonym komentarzem "if (a=0)" to program realizuje pętlę "while( cin.fail())" przy błędnych danych (np literach) ale nie przerywa programu dla wpisanego a=0. przy if (a==0) program przerywa działanie dla a=0 i przerywa działanie dla a=błędne dane (np litery), więc albo-albo. jak sobie z tym poradzić, żeby spełnić pk-ty 1-4? |
|
karambaHZP |
» 2016-11-20 19:14:26 operator przypisania = . operator porównania == . |
|
Dither |
» 2016-11-21 17:46:09 już sobie dałem radę if (a==0) trzeba było wyrzucić poza pierwszą pętlę do.. while, oto poprawiony kod: #include <iostream> using namespace std;
int main() { char wybor; float a, b; do { cout << "Podaj liczby a i b: "; do { cin.clear(); cin.sync(); cout << endl << "a = "; cin >> a; } while( cin.fail() ); if( a == 0 ) { cout << "wyjscie " << endl; return 0; } do { cin.clear(); cin.sync(); cout << endl << "b = "; cin >> b; } while( cin.fail() ); if( b == 0 ) { cout << "wyjscie " << endl; return 0; } cout << endl << "a= " << a << " b= " << b << endl; cout << endl << "wybierz dzialanie [+ - * / 0] "; cin >> wybor; cout << endl << endl; switch( wybor ) { case '0': cout << "wyjscie " << endl; break; case '+': cout << "suma= " << a + b << endl; break; case '-': cout << "roznica= " << a - b << endl; break; case '*': cout << "iloczyn= " << a * b << endl; break; case '/': { if( b != 0 ) cout << "iloraz= " << a / b << endl; else cout << "dzielenie przez zero!" << endl; break; } default: cout << "nie wybrales dzialania [+ - * / 0]" << endl; break; } } while( wybor != '0' ); return 0; }
|
|
1 « 2 » 3 |