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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MarVaL
С++ Beginner
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
#1

Не работает strtold - C++

27.03.2014, 12:53. Просмотров 387. Ответов 10
Метки нет (Все метки)

Нужно перевести строку в формате $123456789.99 в число long double.
Пытался сделать с _atold(char*), но ее нет.

Код:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
 
long double mstold(char str[])
{
    const int NUM_LEN = 100;
    char number[NUM_LEN];
    int str_len = strlen(str);
    int j = 0;
    for(int i = 0; i < str_len; ++i)
    {
        if(str[i] >= '0' && str[i] <= '9')
            number[j++] = str[i];
    }
    number[j] = '\0';
    long double result_num = strtold(str, NULL);
    return result_num;
}
 
int main()
{
    const int STR_SIZE = 128;
    char choice;
    do
    {
        char str[STR_SIZE];
        cout << "Enter a money string: ";
        cin >> str;
 
        cout << str << endl;
 
        long double dd = mstold(str);
        cout << dd << endl;
 
        cout << "One more try? (y/n) ";
        cin >> choice;
    } while(choice == 'y');
    return EXIT_SUCCESS;
}
0
Изображения
 
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 12:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает strtold (C++):

Мышь работает через раз, то есть запустил ОС - мышь не работает, перезагрузил - мышь работает - Windows 7
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с недавних пор мышь стала работать через раз....

Ноутбук работает только с Wi Fi роутера дома, в кафе не работает и везде. Почему? - Wi-Fi
Подскажите пожалуйста, почему у меня ноутбук с виндой 7, работает вай фай только дома с роутера. А когда я прихожу в кафе или в парк, у...

Windows 7, не работает часть служб, не работает сеть, восстановление системы не помогает - Windows 7
Приветствую коллеги! Сам админю уже лет 10, не случалось ситуации еще что гугл не помогал, но вот пришел в организацию, на пк банк клиент,...

Так работает или не работает второй слот для оперативной памяти - Оперативная память
Моему компьютеру уже больше 7-ми лет, купили мне его в сентября 2005 года. На то время очень даже неплохие характеристики: Процессор:...

IE опять все портит, в 9 версии работает, а в остальных нет. не работает float - HTML, CSS
сайт http://gkantecreo.ru/ вверху в шапке слайдер в блоке div с css {float: left; padding-left: 15px;} везде прижат слева, а в &quot;интернет...

Через sublime text 3 и компилятор g++ работает, посоветовали скачать VS, не работает. Миниатюры - C++
через sublime text 3 и компилятор g++ работает, посоветовали скачать VS, не работает.

10
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.03.2014, 13:06 #2
MarVaL, так надо вызывать с правильным параметром, т.е. с number, а не str.
1
MarVaL
С++ Beginner
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
27.03.2014, 13:16  [ТС] #3
Цитата Сообщение от Tulosba Посмотреть сообщение
MarVaL, так надо вызывать с правильным параметром, т.е. с number, а не str.
Извиняюсь, просто у меня не получилось и я изменил на вот это, изначально там стояло number, но результат тот же. Сейчас продемонстрирую

Исправил на number:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
 
long double mstold(char str[])
{
    const int NUM_LEN = 100;
    char number[NUM_LEN];
    int str_len = strlen(str);
    int j = 0;
    for(int i = 0; i < str_len; ++i)
    {
        if(str[i] >= '0' && str[i] <= '9')
            number[j++] = str[i];
    }
    number[j] = '\0';
    long double result_num = strtold(number, NULL);
    return result_num;
}
 
int main()
{
    const int STR_SIZE = 128;
    char choice;
    do
    {
        char str[STR_SIZE];
        cout << "Enter a money string: ";
        cin >> str;
 
        cout << str << endl;
 
        long double dd = mstold(str);
        cout << dd << endl;
 
        cout << "One more try? (y/n) ";
        cin >> choice;
    } while(choice == 'y');
    return EXIT_SUCCESS;
}
0
Изображения
 
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.03.2014, 13:26 #4
MarVaL, всё ок http://ideone.com/iFU88h
только десятичную точку теряете при отбрасывании лишних символов.

Добавлено через 1 минуту
Проверять символ на цифру лучше через std::isdigit()
1
MarVaL
С++ Beginner
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
27.03.2014, 13:57  [ТС] #5
Цитата Сообщение от Tulosba Посмотреть сообщение
MarVaL, всё ок http://ideone.com/iFU88h
только десятичную точку теряете при отбрасывании лишних символов.
Добавлено через 1 минуту
Проверять символ на цифру лучше через std::isdigit()
Я не понимаю у меня не работает. У меня MinGW, компилирую через g++ -Wall -c

Добавлено через 1 минуту
попробовал в этом онлайн-компиляторе, там работает... как так?

Добавлено через 19 минут
попробовал скомпилировать в -std=c++0x, результат тот же.
0
zss
Модератор
Эксперт С++
6406 / 5972 / 1945
Регистрация: 18.12.2011
Сообщений: 15,402
Завершенные тесты: 1
27.03.2014, 14:17 #6
C++
1
 long double result_num = strtold(number, NULL);
number, а не str
0
MarVaL
С++ Beginner
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
27.03.2014, 14:20  [ТС] #7
Цитата Сообщение от zss Посмотреть сообщение
number, а не str
Да. Я изменил это во втором листинге... Даже если бы там стоял str, результат был бы почти таким же
А у меня вообще значения получаются 8е-238
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.03.2014, 15:23 #8
Цитата Сообщение от MarVaL Посмотреть сообщение
попробовал скомпилировать в -std=c++0x, результат тот же.
Какой тот же?
1
zss
Модератор
Эксперт С++
6406 / 5972 / 1945
Регистрация: 18.12.2011
Сообщений: 15,402
Завершенные тесты: 1
27.03.2014, 17:04 #9
В VS 2008 программа работает правильно.
Только не нашлась strtold,
заменил на strtod
1
MarVaL
С++ Beginner
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
29.03.2014, 19:34  [ТС] #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Какой тот же?
числа порядка e-259 и т.д.
А кто-нибудь пробовал компилировать в mingw
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.03.2014, 20:33 #11
MarVaL, попробуйте просто переустановить компилятор. Возможно, обновив версию. Всё должно работать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 20:33
Привет! Вот еще темы с ответами:

Подключение библиотеки DLL C++: работает на примере консоли и не работает в WinForms App - C++/CLI WinForms
Здравствуйте! Помогите начинающему бедному студенту!! Осваиваю С++. В книге Прохоренко(программирование в visual studio 2010 express)...

Из-за чего интернет работает на техникумовских компьютерах и не работает подключении к моему ноутбуку - Сети
В Техникуме есть разные компьютеры - для учителей - для студентов - библиотечные ...перепробовал и библиотечные и студенческие и...

В Windows Forms некоректно работает метод, хотя в консоли работает правильно - C#
//Данный метод должен заменять все элементы в массиве на 1, после найменьшего. public string getNewArray(int array) { ...

не работает в ворде веб компонент,и скачав обновление ow 11 не работает все равно - MS Word
проблема с веб элементами и обновлениями на них))


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
29.03.2014, 20:33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru