![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
помогите!!!!
есть строка длинной 15 символов, нужно преобразовать во Float. преобразую в цикле несколько строк. char str="1256.32"; float fstr; fstr=atof(str); после преобразования получается непонятное число типа -17451255 причем какие-то преобразоваваются,а какие-то нет.... почему????? |
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Может от того, что atof double возвращает а не float?
Попробуй...
И еще, может ты результат смотришь не так? Надежнее всего через дебаггер кацца. |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
У точно так объявлено: char str="1256.32";?
Надо вот так char *str="1256.32"; или char str[]="1256.32"; |
|||
|
||||
| lynx_916 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 13.6.2004 Где: Молдова Репутация: нет Всего: 1 |
а <string.h> есть?
-------------------- Who dares, wins. (с) Solid Snake |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Олег М - прав, поитера не хватает
Вот:
При выводе требуется ставить %f, а не %d |
||||
|
|||||
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Зачем? -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Почему результатом данной программы будет 0.000000
|
|||
|
||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Хороший вопрос. А почему бы и нет? Это же элемент массива аргументов, передаваемых в программу. Значит ничего не передается, вот и 0.
-------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Сам бился над этой проблемой пару недель назад.
Ну во-первых, если argc=1(т е есть только имя проги), то 0 может и не получиться - у меня получилось Segmentation Fault. Поэтому полагаем, что argc > 1, argv[1] != "0", stdlib.h(по C99 "double atof(const char* nptr)" расположен в stdlib.h) не подключен. Что тогда? До меня только сейчас дошло Так что пример atof показывает что перевод типов C не есть быть хорошо. А вот компилятор С++ думает "функция atof... Я ее не знаю. Я не знаю что ей передают в качестве параметров в общем случае. Я не знаю, что она возвращает. Я ничего не знаю, этот юзер держит меня за телепата!? Сейчас я ему такого телепата покажу!". И, радостно ругаясь, C++ кричит об ошибке(или о нескольких ошибках, если разработчики компилятора ЛЮБИЛИ свое дело). Так что "float atof(const char* nptr)" вам нужно указать, если stdlib.h не хотите указывать. И поосторожней с переводом типов. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
На самом деле, перевод long->char - просто. А потом, по его средствам и char->float(double) ещё порще.
-------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Mayk, ну у тебя и фантазия
Я думаю, все проще...
Добавлено @ 08:37 Т.е. "она" думает так: конвертировать в double строку "абвгдеёжз"? Легко! Там же цикл, надо полагать, где к исходному числу (0) добавляются распознанные цифры * на разряд... -------------------- ... |
|||
|
||||
| TeeT |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 9.12.2005 Где: Нальчик Репутация: нет Всего: нет |
lynx_916 так и зачем там sitring.h?
Mayk Кааим компилятором C ты компилил? у меня на 2-х (Builder и MinGW) прога в сигфолт вылетает... |
|||
|
||||
| profispb |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.12.2005 Где: Санкт - Петербург Репутация: 1 Всего: 1 |
А как насчет такого преобразования
n=float(char); printf("Преобразование =%f",n); --------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало! |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
profispb, сам придумал иль подсказал кто?
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |