Форум программистов, компьютерный форум CyberForum.ru

Обработка ошибок - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив объектов класса http://www.cyberforum.ru/cpp-beginners/thread1760935.html
Всем привет! Я не так давно познакомился с классами в C++, прочитав несколько статей по этой теме решил попрактиковаться. Есть задача: нужно реализовать класс "Зоомагазин", в котором будут конструкторы (по умолчанию, с параметрами, копирования); деструктор; также нужно продумать функционал класса и написать соответствующие методы. Я сделал список операций, доступных пользователю, одна из них -...
C++ Работа со строками ( поиск, проверка) Подскажите, как быстрее сделать? Какие вообще есть быстрые способы решения? Моё решение выходить за границу времени. Слова (Время: 1 сек. Память: 16 Мб Сложность: 48%) Для шифрования слов с ними можно производить множество различных операций. Например, интересна такая операция: первые несколько букв заданного слова приписываются к его концу в обратном порядке, после чего удаляются из начала... http://www.cyberforum.ru/cpp-beginners/thread1760931.html
Как сделать красиво? C++
Как реализовать красиво и удобно функционал string to enum ( чтобы по стрингу брать элемент из енума) , с возможностью добавлять новые элементы к enum только в одном месте? есть у меня такой вариант: class A { public: enum class TYPE { enum1, enum2,
C++ Среди чисел 1+1/2, 1+1/3,… найти первое, меньшее а
Дано число а (1 < a < 1,5). Среди чисел 1+1/2, 1+1/3,… найти первое, меньшее а. #include <iostream> #include<conio.h> using namespace std; int main () { double a, one=1; cout <<"Vvedite a"<<endl; cin>>a; for(double i>=2; i++)
C++ Работа с файлами: багаж пассажиров http://www.cyberforum.ru/cpp-beginners/thread1760907.html
Всем привет, вот есть задача и начало кода, только не пойму как его правильно сделать(( За любую помощ буду очень благодарен!!! Создать и записать на диск файл, который содержит данныйе и выводит на экран информацию:: О багаже пасажжиров: Структура записи: • Номер месте, занимаемом пассажир, • Масса багажа, • Наличие льгот в пассажира. Количество записей в файле> 10. Вывести на печать...
C++ Не выполняет программу #include <stdio.h> #include <conio.h> #include <math.h> void main() {int i, n, x, fact, znak, y; printf(" n = "); scanf("%d", &n); printf(" x = "); scanf("%f", &x); подробнее

Показать сообщение отдельно
Eragorn2013
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 9
12.06.2016, 17:02     Обработка ошибок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
using namespace std;
 
class fraction
{
private:
    int num; // числитель
    int den; // знаменатель
public:
    fraction( ) : num( 0 ), den( 1 ) { }
    fraction( int n, int d ) : num( n ), den( d ) { }
 
    fraction operator+ ( fraction f )
    {
        int n = num * f.den + den * f.num;
        int d = den * f.den;
        return fraction( n, d );
    }
    fraction operator- ( fraction f )
    {
        int n = num * f.den - den * f.num;
        int d = den * f.den;
        return fraction( n, d );
    }
    fraction operator* ( fraction f )
    {
        int n = num * f.num;
        int d = den * f.den;
        return fraction( n, d );
    }
    fraction operator/ ( fraction f )
    {
        int n = num * f.den;
        int d = den * f.num;
        return fraction( n, d );
    }
    friend ostream& operator<<( ostream&, fraction& );
    friend istream& operator>>( istream&, fraction& );
    void lowterms( );
};
ostream& operator<<( ostream& s, fraction& f )
{
    s << f.num << "/" << f.den; 
    return s;
}
istream& operator>>( istream& s, fraction& f )
{ 
    s.unsetf( ios :: skipws );
    char ch;
    while( true )
    {    
       s.sync( );
 
       s >> f.num >> ch >> f.den;   
        
       if( !s.good( ) )
       { cout<<"Ошибка ввода! Нужны цифры\nВведите дробь заново: "; }
       else if( f.den == 0 )
       { cout<<"Ошибка ввода! Знаменатель не может иметь значение 0\nВведите дробь заново: "; }
       else
       { s.sync( ); s.clear( ); break; }
       s.clear( );
       s.sync( );
    }
    return s;
}
int main( )
{setlocale(LC_ALL,"rus");
 
fraction f1, f2, f3; char op;
 
    cout << "Введите первую дробь: "; cin >> f1;
    cout << "Введите оператор: "; cin >> op;
    cout << "Введите вторую дробь: "; cin >> f2;
 
switch( op )
{
case '+': f3 = f1 + f2; cout<<"Результат: "; f3.lowterms( ); cout << f3 << endl; ; break;
case '-': f3 = f1 - f2; cout<<"Результат: "; f3.lowterms( ); cout << f3 << endl; ; break;
case '*': f3 = f1 * f2; cout<<"Результат: "; f3.lowterms( ); cout << f3 << endl; ; break;
case '/': f3 = f1 / f2; cout<<"Результат: "; f3.lowterms( ); cout << f3 << endl; ; break;
default: cout <<"Неверный оператор!" << endl; system("pause");exit(1); 
}
cout<<"Программа завершена"<<endl;
 
system("pause");
return 0;
}
void fraction :: lowterms( )
{ 
    long tnum, tden, temp, gcd;
    tnum = labs( num );
    tden = labs( den );
    if( tden == 0 )
    { cout << "Недопустимый знаменатель" << endl; system("pause");exit( 1 ); }
    else if( tnum == 0 )
    { num = 0; den = 1; }
 
    while( tnum != 0 )
    {
        if( tnum < tden )
        { temp = tnum; tnum = tden; tden = temp; }
        tnum = tnum - tden;
    }
    gcd = tden;
    num = num / gcd;
    den = den / gcd;
}
Имеется вот такой РАБОЧИЙ код. Это калькулятор дробей. Вводится первая дробь, затем оператор и вторая дробь, затем выводится результат. В этом коде интересует только кусок, который отвечает за ввод данных и проверку этих данных на ошибки ( СТРОКА 46 - 66 ). Эту часть кода написал сам, но можно сказать, что методом тыка. Совершенно не понимаю как работают биты ошибок. Например в строке 52 обязательно нужна функция s.sync( ); для очистки буфера. Без этой функции вторую дробь ввести корректно будет нельзя, потому что сперва вылезет непонятно откуда взявшаяся ошибка, затем только можно будет ввести вторую дробь, хотя по идее, при вызове этой функции для ввода данных во вторую дробь буфер и так чист, потому что он, как я понимаю, отчищается после ввода первой дроби в строке 63. Расскажите, пожалуйста, как это работает?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru