Jaqross Ответов: 4

Как сделать калькулятор на языке Си?


Я хочу сделать калькулятор на языке Си, включая поплавки, но не спрашивая, Что такое операция и числа один за другим .Я имею в виду, что пользователь напишет 3+2.5 и нажмет enter, и программа вернет 5.5

Что я уже пробовал:

Я думаю, что я должен использовать строку для этого, но я не мог сделать это.

4 Ответов

Рейтинг:
2

CPallini

В качестве альтернативы "подходу синтаксического анализа" вы можете встроить в свой C применение скриптового языка (см., например Встраивание скриптового языка в код C/C++ [^] ) и пусть последний выполнит основную часть работы (то есть вычислит результат выражения, содержащегося в строке).


Рейтинг:
1

OriginalGriff

На самом деле это довольно много работы.
Вам нужно прочитать пользовательский ввод в виде строки, а затем обработать его в токены - и насколько сложным будет этот процесс, зависит от того, насколько "полон" ваш калькулятор.
Под этим я имею в виду, хотите ли вы просто обработать это:

3+2.5
Даю 5.5, или вы хотите это обработать:
3+2.5*-4
Давая -7.0?
Первый пример довольно прост: обрабатывайте цифры и одну полную остановку, пока не встретите что-то, чего нет, и это ваше первое число. То, что не является вашим оператором, а затем вы ищете весь второй номер.
Затем вы можете преобразовать числа в значения с плавающей запятой с помощью функция strtof[^] и процесса оператором с помощью switch

Вторая версия-это гораздо больше работы: вам понадобится стек (и, вероятно, чтобы преобразовать все ваше выражение в обратную полированную нотацию, чтобы облегчить его обработку). Google может помочь вам есть то что вы ищете Калькулятор C - Поиск В Google[^] и начинай читать!


Рейтинг:
0

Patrice T

Цитата:
Я думаю, что я должен использовать строку для этого, но я не мог сделать это.

Поскольку ввод с клавиатуры может быть выполнен только со строкой/буфером, комментарий предполагает, что вы очень новичок.
Калькулятор со встроенным входом довольно сложен. Довольно скоро вам нужно будет обрабатывать операторы priority, sign operator, parenthesis ... а для этого парсер с грамматикой.
Парсер не для абсолютного новичка, скорее получите опыт перед использованием.
Парсинг - Википедия[^]
ANTLR - Википедия[^]
Использование обратной польской нотации упростит обработку входных данных.
Обратная польская нотация - Википедия[^]

Совет: приобретите опыт работы с меньшим/более простым проектом до этого проекта.


Рейтинг:
0

KarstenK

Самый простой способ-это попросить операцию, а не два числа, иначе это куча работы.

Когда вы хотите сделать это в C, это очень много работы, потому что вы должны сделать все это самостоятельно. Более высокие языки, такие как C++, имеют строковые классы, которые могли бы вам помочь. Поэтому рассмотрите возможность использования C++.

Первое, что вам нужно сделать, это разобрать входные данные в виде строки для чисел и операторов, а затем обработать их правильно.

Функция isdigit и АТОЛ помочь вам.

вы можете получить доступ к символу строки с помощью оператора [} :

char c = mystring[2];//third char because first has offset 0