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

C++ Калькулятор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 228, средняя оценка - 4.74
Boshop
13 / 13 / 0
Регистрация: 25.09.2012
Сообщений: 122
25.09.2012, 17:54     C++ Калькулятор #1
Начал практиковаться в C++ помогите понять почему не работает мой калькулятор?
Вроде все правильно,ввожу числа а он просто отключается. Знаю что много переменных и все не в классах,но мне бы хотелось чтобы он для начала работал.В чем может быть проблемма?

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
#include <iostream>
using namespace std;
int main()
{
    char s[100];
    cout << "Vvedite primer: \n";
    cin >> s;
    int per,two,obch;
    char h[20];
    char k[20];
    char j;
    char o;
    int f=0;
    int l=0;
    bool ten=false;
    bool six=false;
    bool joke=false;
    bool one=false;
    bool i =false;
    if(i==false)
    for(int i=0;i<=100;i++)
    {
        if(ten==false)
        {
        if(isdigit(s[i]))
        {
            h[f]=s[i];
            f+=1;
        }
        else
        {
            j=s[i];
            ten=true;
            six=true;
        }
        }
        if(six==true)
        {
            if(isdigit(s[i]))
            {
                k[l]=s[i];
                l+=1;
            }
            else 
            {
                o=s[i];
                six=false;
                joke=true;
            }
        }
        if(joke==true)
        {
            if(one=false)
            {
            per=atoi(h);
            }
            two=atoi(k);
            switch(j)
            {
            case '+': if(one ==false) obch=per+two;else obch+=two;break;
            case '-': if(one ==false) obch=per-two;else obch-=two;
            case '*': if(one ==false) obch=per*two;else obch*=two;
            case '/': if(one ==false) obch=per/two;else obch/=two;
            case '=': cout << obch;i=true;break;
            }
            one=true;
        }
        cout << obch;
    }
    cin.get();
    cin.get();
    cin.get();
}
Писать что это быдло-код ненадо сам знаю. Просто скажите в чем проблеммы моего кода. Знаю критики будет очень много и я к ней готов.
http://dump.ru/file/5861282

Добавлено через 33 минуты
Если непонятно для чего нужны какие-то переменные,объясню
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2012, 17:54     C++ Калькулятор
Посмотрите здесь:

Калькулятор на С++ C++
C++ Калькулятор на С
C++ Калькулятор
Калькулятор C++
Калькулятор C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
25.09.2012, 17:58     C++ Калькулятор #2
В каком виде туда примеры вводить?
Может дело и не в этом, но допишите system("pause"); перед ретурном
DebieCooper
 Аватар для DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 285
25.09.2012, 18:41     C++ Калькулятор #3
А где у него ретурн вообще?)
Boshop
13 / 13 / 0
Регистрация: 25.09.2012
Сообщений: 122
25.09.2012, 19:22  [ТС]     C++ Калькулятор #4
Можно вписывать только целые числа и чтобы в ответе получались только целые числа

Добавлено через 1 минуту
Сделал как порекомендовали но ничего не изменилось но теперь стало раз 30 выводить такую вот комбинацию "-858993460-"

Добавлено через 3 минуты
При умножении, делении,ычитание выдаёт такую ошибку "Integer division by zero"

Добавлено через 14 секунд
При умножении, делении,ычитание выдаёт такую ошибку "Integer division by zero"
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
25.09.2012, 19:32     C++ Калькулятор #5
Вот набросок калькулятора, который просто считает 2+2 (вводим 2+2, получаем 4 ). В твоём коде я не понял логики, попытался исправить код, но в итоге от твоего кода ничего не осталось (почти).
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
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
 
int main()
{
    char s[100];
    cout << "Vvedite primer: \n";
    cin >> s;
 
    long result = 0;
    int first_operand, second_operand;
 
    char first_string[20];
    char second_string[20];
 
    memset( first_string,0, 20);
    memset(second_string,0, 20);
 
    char cur_operator = ' ';
 
    char Operator[] = {'+', '-', '*', '/'};
 
    bool error = false;
 
    unsigned i;
 
    for (i = 0; isdigit(s[i]) ; ++i)
    {
       first_string[i]=s[i];
    }
 
    for (unsigned j = 0; j < sizeof(Operator); ++j) {
 
       if (s[i] != Operator[j]) {
          error = true;
       }
       else {
          error = false;
          cur_operator = Operator[j];
          break;
       }
    }
    if (error) {
       cout << "WRONG OPERATOR: " << s[i];
       return -1;
    }
 
    for (unsigned j = 0; isdigit(s[++i]) && i < sizeof(s) ; ++j)
    {
       second_string[j]=s[i];
    }
 
    first_operand  = atoi( first_string);
    second_operand = atoi(second_string);
 
    switch(cur_operator) {
 
       case '+': if(first_operand) result = first_operand + second_operand;
                 else result += second_operand;
       break;
       case '-': if(first_operand) result = first_operand - second_operand;
                 else result -= second_operand;
       break;
       case '*': if(first_operand) result = first_operand * second_operand;
                 else {
                    std::cout << "ERROR: Operand missing";
                    return -1;
                 }
       break;
       case '/': if(first_operand) result = first_operand / second_operand;
                 else {
                    std::cout << "ERROR: Operand missing";
                    return -1;
                 }
       break;
       default:
          std::cout << "ERROR";
          return -1;
    }
    cout << '=' << result;
 
    cin.get();
 
    return 0;
}
А вообще советую почитать исходники от Evg, тогда поймёшь, как идёт разбор выражений (если интересно)
Представление выражения в двоичном дереве Чуть ниже есть пояснения
Boshop
13 / 13 / 0
Регистрация: 25.09.2012
Сообщений: 122
25.09.2012, 21:17  [ТС]     C++ Калькулятор #6
а что это за функция memset?
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
25.09.2012, 23:41     C++ Калькулятор #7
Цитата Сообщение от Boshop Посмотреть сообщение
а что это за функция memset?
Заполняет блок памяти данными ( в данном случае нулями).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2012, 07:26     C++ Калькулятор
Еще ссылки по теме:

Калькулятор C++
Калькулятор C++
Простой калькулятор и калькулятор с парсингом C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Boshop
13 / 13 / 0
Регистрация: 25.09.2012
Сообщений: 122
26.09.2012, 07:26  [ТС]     C++ Калькулятор #8
Цитата Сообщение от #pragma Посмотреть сообщение
Заполняет блок памяти данными ( в данном случае нулями).
Спасибо.Понял теперь свои ошибки, буду практиковать.
Yandex
Объявления
26.09.2012, 07:26     C++ Калькулятор
Ответ Создать тему
Опции темы

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