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

Повтор арифметической операции - C++

Восстановить пароль Регистрация
 
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
02.11.2012, 04:09     Повтор арифметической операции #1
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
 
float number()
{
    int res =0;
    for(;;)
    {
        char c = cin.get();
        if( c >= '0' && c <= '9')
            res = res * 10 + c - '0';
        else
        {
            cin.putback(c);
            return res;
        }
    }
}
float expr();
 
float skobki()
{
    char c = cin.get();
    if( c == '(')
    {
        float x = expr();
        cin.get();
        return x;
    }
    else
    {
        cin.putback(c);
        return number();
    }
}
float factor()
{
    float x = skobki();
    for (;;)
    {
        char c = cin.get();
        switch (c)
        {
        case '*':
            x *= skobki();
            break;
        case '/':
            x /= skobki();
            break;
        default:
            cin.putback(c);
            return x;
        }
    }
}
 
float expr()
{
    float x = factor();
    for (;;)
    {
        char c = cin.get();
        switch (c)
        {
        case '+':
            x += factor();
            break;
        case '-':
            x -= factor();
            break;
        default:
            cin.putback(c);
            return x;
        }
    }
}
 
 
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    char es;
    do{
    cout << "Ведите выражение:  ";
    float res = expr();
    
    
    
    cout << "Результат:  " << res << endl; 
    
    cout << "Продолжить(y/n)  ";
    cin >> es;
    }while ( es == 'y');
 
    getchar();
    getchar();
        return 0;
}
Доброго времени суток , вот есть код который выполняет арифметические опрерации со скобками, хочу добавить в него многоразовые операции, столько скок мне надо, сам лично код не писал так как еще не могу такое вытворять , но вот расхрабрел и добавил в int main() цикл do while и выходит так что первая операция выполняеться, через "Продолжить(y/n)" повторяю операцию , а оно автоматически выводит Результат: 0 без возможности ввода данных, и не знаю я как в цикле заставить работать float res = expr(); , как быть кто подскажет.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.11.2012, 06:31     Повтор арифметической операции #2
Цитата Сообщение от I love myguitar Посмотреть сообщение
многоразовые операции
чаво?
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
02.11.2012, 07:45  [ТС]     Повтор арифметической операции #3
Я наверное чот сильно заумно начал , проще говоря нужен простой калькулятор с простыми операциями ну там сложение, умножение, вычитание , деление + * - / , также естественно должны присутствовать
операции со скобками : ( 2 + 3) * 2 = ; и вот в выше описаном коде эта функция действует , но одноразово, тоесть после компиляции в окошке Debug ..exe (я занимаюсь в VC2010) ввожу пример
( 2 + 3) * 2 = нажимаю Enter и мне результат: 10. Чтобы ввести следующий пример мне нужно опять перекомпилировать , так вот мне хочеться этого не делать , а каким то образом подключить цикл который после решения примера тут же при первой компиляции будет срашивать " Продолжить(y/n) " и
в выше приведенном коде цикл do while работает , тоесть после результата примера следующяя строка
" Продолжить(y/n) " я выбираю продолжить "у" и мне сразу выводит
результат "0" " Продолжить(y/n) " и так до бесконечности , так вот немогу подключить в этом цикле функцию что бы вводить числа для следующего примера
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
02.11.2012, 08:28     Повтор арифметической операции #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    setlocale(LC_ALL, "rus");
 
    char es;
    do{
    cout << "Ведите выражение:  ";
    float res = expr();   
    cout << "Результат:  " << res << endl;     
    cout << "Продолжить(y/n)  ";
    cin >> es;
     cin.clear();while(cin.get()!='\n');//Очистка потока
    }while ( es == 'y');
 
    getchar();
    getchar();
        return 0;
}
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
02.11.2012, 15:41  [ТС]     Повтор арифметической операции #5
Сударь вы гениальны cin.clear();while(cin.get()!='\n');//Очистка потока Весьма премногобдагодарен !!!
Yandex
Объявления
02.11.2012, 15:41     Повтор арифметической операции
Ответ Создать тему
Опции темы

Текущее время: 03:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru