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

atof и "фальшивый ноль" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ fstream: открытие на запись http://www.cyberforum.ru/cpp-beginners/thread343949.html
fstream a("file.txt",ios::out); a<<"abc\n"; a.close(); Перезаписывает файл полностью даже без флага ios::trunc. fstream a("file.txt",ios::out|ios::in); a<<"abc\n"; a.close(); Перезаписывает только первые 4 символа файла, не обрезая файл. Как и должно быть.
C++/CLI WinForms Open File Dialog Добрый день! Не подскажите, как работать с диалогами открытия/сохранения файлов. Хотя-бы как отрыть файл, то есть получить строку с именем файла из диалога. http://www.cyberforum.ru/cpp-beginners/thread343917.html
C++ Работа с string в С++
Переменная string str = "123456". Необходимо второй элемент переменной str (str) преобразовать в число и передать в переменную int i. Как это можно сделать?
Модули программы C++
Привет! Недавно начал изучать си++, и у меня возник такой вопрос: как разместить класс или функцию в отдельном модуле.
C++ Лучшая книга по с++ для новичков http://www.cyberforum.ru/cpp-beginners/thread343883.html
Какая самая лучшая книга для новичков в c++ Вот несколько вариантов: С++ для начинающих. Шаг за шагом - Герберт Шилдт Полный справочник по C++ - Герберт Шилдт C++: базовый курс - Герберт Шилдт Как программировать на C++ - Х. М. Дейтел, П. Дж. Дейтел Какие лучше? Или предложите какие нибудь другие книги. P.S не нуб,изучал PHP,HTML,C#...С++ мне понадобится в будущем так как моя профессия...
C++ Как инициализировать статический константный массив в классе? Например, есть класс, которой статически хранит виды себя. Не могу понять как его инициализировать (Или может предложите хранить по другому?) class Object { private: static const Object object_types; int i1, i2; public: static const int COUNT_OBJECT_TYPES = 6; ... }; подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
21.08.2011, 15:50     atof и "фальшивый ноль"
Gepar, надо написать обертку над strtod:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
 
double str_to_double(const char*, int*);
 
int main(int argc, char* argv[])
{
    size_t i;
    int err_flag;
    double result;
        
    for(i = 1; i < argc; ++i)
    {
    printf("String representation: \"%s\". Result - ", argv[i]);
    result = str_to_double(argv[i], &err_flag);
    switch(err_flag)
    {
    case 0:         /* Success */
        printf("%.4f\n", result);
        break;
 
    case 1:
        puts("Illegal value (No conversion performed)");
        break;
 
    case 2:
        puts("Illegal value (remaining input)");
        break;
 
    case 3:
        printf("Correct value (overflow or underflow): %f\n", result);
        break;
    }
    }
    
    exit(0);
}
 
double str_to_double(const char* str_repr, int* err_flag)
{
    char* endptr;
    double result;
 
    *err_flag = 0;
    result = strtod(str_repr, &endptr);
 
    if(str_repr == endptr)
    *err_flag = 1;      /* no conversion performed */
 
    else if(*endptr != '\0')
    *err_flag = 2;      /* remaining input */
 
    else if(errno == ERANGE)
    *err_flag = 3;      /* overflow or underflow */
    
    return result;
}
Код
[nameless@laptop c-sample]$ ./c-sample \
> '0xdeadbeef' \
> '123.0' \
> '0' \
> '0.0'
> '' \
> '-100500.42e666' \
> '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' \
> '24 foo'
String representation: "0xdeadbeef". Result - 3735928559.0000
String representation: "123.0". Result - 123.0000
String representation: "0". Result - 0.0000
String representation: "0.0". Result - 0.0000
String representation: "". Result - Illegal value (No conversion performed)
String representation: "-100500.42e666". Result - Correct value (overflow or underflow): -inf
String representation: "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111". Result - Correct value (overflow or underflow): inf
String representation: "24 foo". Result - Illegal value (remaining input)
Добавлено через 6 минут
Опоздал...
 
Текущее время: 05:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru