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

Консольный калькулятор требует описание - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
m4dn3ss
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 3
03.04.2010, 13:23     Консольный калькулятор требует описание #1
Приветствую!

Я написал простенький консольный калькулятор на C++ и хотел бы знать описание нескольких шагов. Знаю звучит глупо будто написал не я, но так уж получилось, что я не понял строчки 10 и 11 . Так же прошу высказать какие-либо замечания к программе, где нибудь поправить, подсказать и т.п. Прошу помочь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
 
        double a,b;             //описание переменных a и b
        char s[2],c1[2],c2[2];  //описание строк s, c1 и c2
        cin>>s;                 //ввод строки s    
        c1[0]=s[0]; c2[0]=s[2]; //?
        c1[1]=NULL; c2[1]=NULL; //?
        a=atof(c1); b=atof(c2); //преобразование строки c1 и c2 в числа a и b.
        switch (s[1]){
                case '+' : cout<<a+b<<endl; break; 
                case '-' : cout<<a-b<<endl; break; 
                case '*' : cout<<a*b<<endl; break; 
                case '/' : cout<<a/b<<endl; break; 
        }
}
так же добавлю, что калькулятор может работать только с однозначными числами.
Ввод: 7+9 | 9*9
Вывод: 16 | 81
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
03.04.2010, 13:42     Консольный калькулятор требует описание #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
{
 
        double a, b;
        char s;             // знак операции
        cin >> a >> s >> b;
        switch(s)
        {
            case '+' : cout << a+b << endl; break;
            case '-' : cout << a-b << endl; break;
            case '*' : cout << a*b << endl; break;
            case '/' : cout << a/b << endl; break;   // вот здесь необходимо сделать проверку деления на 0
            default : cout << "Error." << std::endl; // если будет введён символ отличный от знака операции
        }
}
gh05t
47 / 46 / 4
Регистрация: 03.04.2010
Сообщений: 99
03.04.2010, 13:44     Консольный калькулятор требует описание #3
У тебя в строку s сохраняется то, что ввел пользователь, то есть при вводе 7+9
s[0] = '7'
s[1] = '+'
s[2] = '9'.
Соответственно в 10 строке ты записываешь символы '7' и '9' в нулевые элементы массивов с1 и с2. В строке 12 ты записываешь в элемент 1 этих массивов 0, и теперь они представляют собой строки с нулем на конце ('7',0 и '9',0) (можно использовать их в качестве аргументов функций для работы со строками, чот и делается в дальнейшем - atof() ).

Замечание - введенные числа приводятся к float, хотя ввести можно всего одну цифру... Так что или увеличить количество допустимых цифр, или приводить к int.
m4dn3ss
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 3
03.04.2010, 13:51  [ТС]     Консольный калькулятор требует описание #4
rangerx, спасибо за ваше решение!
я не догадался, что можно вводить переменные без пробелов. Значит можно, если первая переменная одного типа, а вторая другого?

gh05t,
Цитата Сообщение от gh05t Посмотреть сообщение
Соответственно в 10 строке ты записываешь символы '7' и '9' в нулевые элементы массивов с1 и с2. В строке 11 ты записываешь в элемент 1 этих массивов 0, и теперь они представляют собой строки с нулем на конце ('7',0 и '9',0)
а этот ноль же не число? это как бы пустое место? да?
gh05t
47 / 46 / 4
Регистрация: 03.04.2010
Сообщений: 99
03.04.2010, 14:01     Консольный калькулятор требует описание #5
Это значение, которое говорит о конце строки. При выполнении математических операций калькулятором не участвует.
m4dn3ss
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 3
03.04.2010, 14:03  [ТС]     Консольный калькулятор требует описание #6
gh05t, а тогда все, большое спасибо! разобрался.
Yandex
Объявления
03.04.2010, 14:03     Консольный калькулятор требует описание
Ответ Создать тему
Опции темы

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