Запись результата вычисления в текстовый файл
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Здравствуйте, хотел узнать, как записать результат вычислений в текстовый файл.
Вот мой примитивный калькулятор:
Подскажите пожалуйста ещё кое что:
Как тут распознать символы и определить их автоматически, что бы потом можно было просто вычислить?
Я думал может быть записать введённую строку в массив, а потом вывести с распознанными символами Double и char. Стоит ли записывать знаки в символьный вид, или они в отдельную категорию входят?
Спасибо за внимание.
Будет лучше если вводить будем строку а не по символу.
a) d[1] = c; //example
b) (54 — 3 * 6) / 2, тут надо проверить все if'ом, прочитать целиком строку, и найти доминирующее выражение(В данном случае скобки, а в скобках умножение, затем только деление)
с) Насколько я знаю, строку в массив не запихнуть, строка это string.
спасибо Ers, но
Извините я ещё зелен в с++, чуток совсем знаю)
поправил, извините за мультипост
Любая строка, на низком уровне языка, есть массив символов. Класс
string
просто облегчает нам работу со строками. Но не суть.По-простому никак. Нужно писать парсер, который будет анализировать строку и вычленять из нее данные.
Вот пример парсера для систем уравнений, который умеет подобные слагаемые :)
Записать что-то в файл можно через Сишную функцию fputs, или через
std::fstream
.Скопировал код, при запуске пишет «нет доступа к файлу!» Ни создаёт ни записывает при созданном файле.
Покажите, как вы пишете данные в файл.
Просто копирую со страницы с уроком.
Eskel, судя по имени файла, ты сидишь под Виндой, и скорее всего это W7 или W8. От Висты и выше операционки очень ревностно относятся к записи файла «не туда». Особенно это касается диска C. Если у тебя система установлена с настройками по умолчанию, попробуй указать имя файла либо вообще без пути, тогда файл должен быть записан в каталог запуска программы (например в тот, где лежит исполняемый файл), либо указать такой путь для файла, который явно разрешён для твоей учётной записи (например c:\users\<username>\Documents...).
Ещё пара уточнений по программе.
(1) Вызов fclose(file) лучше перенести в блок if (file) {...}, поскольку если файл не открыт, то и закрывать его не надо. В данном случае это не особо важно, поскольку fclose() не возбуждает исключение, если закрываемый файл не открыт, но лучше писать аккуратно.
(2) Синтаксис
теперь deprecated, т.е. «не рекомендуемый». Что бы компилятор не давал предупреждений надо писать так:
Спасибо за предложенные варианты.
У меня семёрка, попробовал как вы сказали, но всё равно нет доступа к файлу(
Вот как я ввёл первый вариант:
Попробуй так:
Благодарю, теперь получается записать, но только если указывать не путь к файлу а только название, то есть:
При указании адреса файла, по прежнему не записывает.
Либо (1) пытаешься записать файл в запрещённое, с точки зрения Винды, место, либо (2) не правильно указываешь путь, например с одиночными бэкслэшами, как в твоём посте от 15.12.13.
Есть вопрос немного не по теме, хочу сделать что то типа калькулятора, с помощью борланд билдера, поставил на форму Edit1, Button1 и Label1. Пишу код в кнопку:
Предполагаю, что записанное в Эдит1 выражение, хотя бы 2+2, должно рассчитываться как если бы я вставил туда переменные для уравнения, то есть за место переменных я пытаюсь ввести всё уравнение, но выдаётся ошибка:
«is not a valid floating point value», то есть «не является допустимым значением с плавающей точкой», хотя я по умолчанию забыл все переменные как «double», но выражение с плавающей точкой это же float? Помогите мне доделать программу и пожалуйста разъясните что именно я сделал не так.
Борланд Билдер, в свою очередь, предполагает, что в Эдит1 пользователем введена строка. И он, на самом деле, прав.
Почему ты считаешь, что выражение, введённое в Эдит1 вообще должно как-то интерпретироваться?
Если ты вводишь в поле число (возможно с десятичной точкой), то метод ToDouble() вернёт тебе число с плавающей точкой двойной точности (которое ты присваиваешь переменной целого(!) типа). Кстати, заметь, что этот метод принадлежит свойству Text, что подсказывает, что данные там хранятся в виде строки. Если метод ToDouble() не может обработать строку как число с плавающей точкой, то выдаёт ошибку, которую ты и наблюдаешь. Всё законно.
float — тип числа с плавающей точкой одинарной точности.
double — тип числа с плавающей точкой двойной точности.
Если ты хочешь получать от строки ввода (TEdit) результат вычисления выражения, то надо от TEdit унаследовать новый класс и добавить в него недостающую функциональность. Т.е. в первую очередь парсер арифметических выражений и, видимо, ещё кой-какую обвязку. Но я бы, наверное, сделал это отдельно от TEdit, получая на вход строку из поля ввода и возвращая результат или флаг ошибки.
PS. С Borland C++ Builder очень давно не работал, поэтому в каких-то деталях могу быть неточным.