0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 9
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Задача по книге Р. Лафоре24.05.2019, 18:26. Показов 2042. Ответов 6
Пример по книге Лафоре... (Система Windows 10/64bit.)
Я знаю что на форуме есть решения но я хочу своим умом понять и решить, к тому же код там написан извольте промолчать... . Я лишь хочу чтобы мне указали на мои ошибки! Кстати как я понял из задания проблему нужно решить именно как массив символов, в моем понимении это char[]... (... Вам нужно будет обработать денежную строку как массив символов) Проблема 1: В main() он придерается к этому куску кода:
если ввести так:
Проблема 2: В этом куске не происходит копирование из char в char.
Проблема 3: в функции
Например, ввод: 123,465,789.25 Вывод: 123.465 Если без запятых... Например, ввод: 123465789.25 Вывод: 123465789 вот собственно и код:
0
|
|
24.05.2019, 18:26 | |
Ответы с готовыми решениями:
6
Задачник для изучения по книге Лафоре Как привести дробь к несократимому виду? Есть ли ошибки в книге Лафоре? Проблемы с переводом строки в число (по книге Лафоре "ООП в С ++ ") Разобраться в примерх к книге Лафоре "Обьектно-ориентированое программирование в С++" |
Вездепух
![]() ![]() 10820 / 5841 / 1585
Регистрация: 18.10.2014
Сообщений: 14,496
|
|
24.05.2019, 18:52 | 2 |
0
|
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 9
|
|
24.05.2019, 19:27 [ТС] | 3 |
это код ASCII. где '49' это цифта 0, соответственно '57' это 9
тоесть нужно скопировать в локальную переменную только цифры. Для дальнейшей перечи в msmoney типа double. Добавлено через 6 минут Произошла очепятка ![]() msmoney = atof(strtemp); правельней ![]()
0
|
Прощай, Мир!
1672 / 829 / 253
Регистрация: 26.05.2012
Сообщений: 3,057
|
||||||||||||||||||||||||||||||||||||
25.05.2019, 14:14 | 4 | |||||||||||||||||||||||||||||||||||
![]() Решение
чтобы использовать функцию strlen( ) нужно подключить директиву препроцессора в начале программы..
![]()
1
|
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 9
|
|||||||||||
25.05.2019, 16:31 [ТС] | 5 | ||||||||||
На сколько мне известно функция strlen(); в C++ помещена в пространство имен std;
Или как минимум в моем компиляторе, в заголовочном файле <iostream> уже включен <cstring> В конечном счете я с вами согласен, лучше подключать <cstring>, так как не во всех компиляторах это реализовано. (Хочу заметить, я не умничаю, просто читал об этом, если же ошибаюсь прошу наставить на путь истинный). здесь я понял, так же понял про ASCII коды, и указал прямо цифры, спасибо!
но ваш способ наглядней, и легко читаем, хоть и длиннее ![]() здесь я сам не понял почему, но все заработало после ввода cin >> strmoney;
Что в вашем примере, что в моем примере, функция atof(); не передает точку например: Ввод: 123456.55 Вывод: 123456 Если есть запятая после нее(запятой) не выводится нечего Ввод: 123,456.55 Вывод 123 Я склоняюсь к тому что фукнция atof() не работает правильно через фунцию MS_told(); Потому что когда я запускаю функцию atof() в main() пример: Ввод: 123,456.78 Вывод 123.456 Если же ввести с точкой: Ввод: 123.45 Вывод: 123 Я предполагаю это связано с setlocale(,,); но разобраться я не смог в этом вопросе.
0
|
Прощай, Мир!
1672 / 829 / 253
Регистрация: 26.05.2012
Сообщений: 3,057
|
|||||||||||
26.05.2019, 09:43 | 6 | ||||||||||
![]() Решение
по-моему, ты ничего не понял.. я же сказал ранее, что для массива strtemp должны идти свои индексы (например, j а не i)..
и присвоение нуль терминального символа должно происходить после всего цикла for, а не после if.. например, так..
проверь свой код и мой.. замечаешь разницу!? это не вина функции atof.. просто выводить значение msmoney нужно с помощью манипуляторов..
а какой смысл тестирования программы с запятой, если она (запятая) не копируется во временную строку!? ведь именно временная строка преобразуется в число типа double.. да и вообще функция atof вроде работает только с точкой.. число может заканчиваться любым символом, который не может являться частью числа с пла*вающей точкой. например, этим символом может быть пробел, знак пунктуации, отличный от точки, буква, отличная от «Е» или «е»..
1
|
Вездепух
![]() ![]() 10820 / 5841 / 1585
Регистрация: 18.10.2014
Сообщений: 14,496
|
|
27.05.2019, 22:14 | 7 |
Код ASCII для
'0' и '9' - это 49 и 57 . У вас же в коде написано '49' и '57' . Это никакие не "коды ASCII".
0
|
27.05.2019, 22:14 | |
Помогаю со студенческими работами здесь
7
Задача из Лафоре Задача из Лафоре Не компилируется задача из Лафоре Лафоре задача по классам Очередь (задача из Лафоре) Лафоре. Глава 11. Задача 2 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |