Меня затронула эта проблема и я решил разобраться. Написал код, который работает так, как ты ожидал. Ну почти. Теперь он хитрый стал и не отстанет от пользователя, пока тот не введет то, что надо![]()
Этот код я проверял на 2005 студии, а тот пример был скомпилирован в 6. Код я покоментировал, поэтому должно быть понятноКод:// sqrt.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <math.h> using namespace std; bool Continue (const char *theThingWeAreDoing) { char DoneCharacter; cout << endl << theThingWeAreDoing << " - Nazhmite \"n\" i \"Enter\" dlya vihoda ili druguyu klavishu dlya povtora: "; cin >> DoneCharacter; return (DoneCharacter != 'n'); } int NumError(void) { cerr << "Vozmozhno vi vveli ne chislo!" << endl; cin.clear(); char BadInput[5]; cin >> BadInput; return 1; } //Моя новая функция для хитрого ввода double Input(const char *s) { double r; cout << s; while(!(cin >> r)){ //Вводящий что то напартачил. Ругнём его cout << "Eto ne chislo. Poprobujte eshche!" << endl; //Очистим буфер cin.clear(); //Проигнорируем все символы до конца строки, но не больше 80 cin.ignore(80, '\n'); //и на второй круг }; return r; }; int _tmain(int argc, _TCHAR* argv[]) { do{ try{ cout << "Vvedite argumenty a, b, c uravneniya vida \"ax^2 + bx + c = 0\" v sootvetstvii s ih znakami. a ne dolzhno byt' ravno 0." << endl; double a = Input("a: "); if(a == 0){ cout << "a ne dolzhno byt' ravno 0!" << endl; }else{ double b = Input("b: "); double c = Input("c: "); double D = (b*b)-(4*a*c); if(D < 0){ cout << "Diskriminant menshe 0!" << endl; }else{ double x1 = (-(b)-sqrt(D))/(a*2); double x2 = (-(b)+sqrt(D))/(a*2); if(fabs(D) <= 0.001){ cout << "x = " << x1 << "." << endl; } else{//Здесь было условие. Но учитывая предыдущее, его смело можно убрать cout << "x1 = " << x1 << ";" << endl; cout << "x2 = " << x2 << "." << endl; } } } } catch(...) { NumError();//Теперь это наверное не надо. }; } while (Continue("Escho raz? ")); return 0; }




Тема:
Ответить с цитированием
думаю, выглядит по лучше, чем в консоли...


Социальные закладки