Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2011, 16:27   #11
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
3. Либо Вы ошибаетесь)
char b[40]; тут b неявно указатель, то есть можно передавать его в ф-ции, которые принимают char*.
Я с подобным уже сталкивался. Не знаю почему, но некоторые функции из math.h, упорно не хотят работать с неявными указателями. Не помню сейчас какие (кроме этой), но есть. Указал явный и всё "пошло" . Выяснять почему это так, не стал. Может баг какой, фиг знает.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 15.07.2011, 16:58   #12
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Я с подобным уже сталкивался. Не знаю почему, но некоторые функции из math.h, упорно не хотят работать с неявными указателями.
Ерунда. У вас, скорее всего, были ошибки в других местах
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 15.07.2011, 17:08   #13
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что значит "мусорные значения"?
Я вот так эту задачу решал:
Код:
double mstold(char strm[])
	{
		string s="0123456789.";
		char retstr[20];
		for(int i=0, j=0; i<strlen(strm); i++)
			if( s.find_first_of(strm[i]) < s.size() )
				retstr[j++]=strm[i];
		n = atof(retstr);
		return n;
	}
Кстати, long double обычно = double в Виндовс.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.07.2011, 17:35   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Кстати, long double обычно = double в Виндовс.
боже упаси...
просто микрософтовская msvcrt не реализует для С функций(в частности printf), поддержку long double(10 байт) при этом компилятор знает этот тип.
Цитата:
А библиотека math.h для чего включена?
1)в С++ нет такой библиотеки.
2)_atold, вас нижнее подчеркивание не смущает?
Цитата:
тандартом не определена и STL
STL это не С++, хотя части нее и вошли в С++ стандарт.

если уж С++, то проще всего(да и правильнее, я считаю) это применить stringstream.
даже вот вам, ваша atold.
Код:
long double atold(const char* str)
{
    string t(str);
    stringstream s(t);
    long double r;
    s>>r;
    return r;
}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.07.2011 в 17:40.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.07.2011, 21:45   #15
parkito
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
С этой функцией - нет. Если в задании указано, что нужно использовать именно её, то одно из двух.
1. Либо указатели вы уже проходили.
2. Либо задание не соответствует истинному положению вещей.
Указатели слдущая тема.

Так как мне решить эту задачу ? Что в моем алгоритме не правильно?

Последний раз редактировалось Stilet; 20.07.2011 в 08:06.
parkito вне форума Ответить с цитированием
Старый 16.07.2011, 21:19   #16
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
если уж С++, то проще всего(да и правильнее, я считаю) это применить stringstream.
даже вот вам, ваша atold.
Код:
long double atold(const char* str)
{
    string t(str);
    stringstream s(t);
    long double r;
    s>>r;
    return r;
}
Если уж и использовать std::string, то там есть функция stold
Код:
long double std::stold(const string & _Str, size_t * _Idx = 0);
An1ka вне форума Ответить с цитированием
Старый 16.07.2011, 22:31   #17
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Если уж и использовать std::string, то там есть функция stold
Код:
long double std::stold(const string & _Str, size_t * _Idx = 0);
stold - часть ещё неутверждённого стандарта, потому лучше её пока не использовать
netrino вне форума Ответить с цитированием
Старый 17.07.2011, 01:05   #18
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
stold - часть ещё неутверждённого стандарта, потому лучше её пока не использовать
Это почему и кому от этого будет лучше ?
Надо использовать всё, что поставляется с компилятором ! Программы пишут под конкретные компиляторы, если поддерживается, то значит можно и нужно.
An1ka вне форума Ответить с цитированием
Старый 17.07.2011, 01:16   #19
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Это почему и кому от этого будет лучше ?
Надо использовать всё, что поставляется с компилятором ! Программы пишут под конкретные компиляторы, если поддерживается, то значит можно и нужно.
Программа должна компилироваться любым компилятором. Есть случаи, когда не избежать специфичного для компилятора кода, но если есть возможность, то лучше этого не допускать.
Лучше будет тем, кто попытается скомпилировать программу компилятором, не поддерживающим новый (и ещё пока даже не утверждённый) стандарт. Тем более, Вы ведь не знаете какой компилятор использует ТС.
netrino вне форума Ответить с цитированием
Старый 17.07.2011, 08:05   #20
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Программа должна компилироваться любым компилятором. Есть случаи, когда не избежать специфичного для компилятора кода, но если есть возможность, то лучше этого не допускать.
Лучше будет тем, кто попытается скомпилировать программу компилятором, не поддерживающим новый (и ещё пока даже не утверждённый) стандарт. Тем более, Вы ведь не знаете какой компилятор использует ТС.
Вот тут вы не правы. Совершенно не должна
Это равносильно тому, как сказать, что на Билдере нельзя пользоваться AnsiString
Просто если у кого-то устаревший компилятор, то это совершенно не значит, что все тоже обязаны использовать всякое старьё. Не важно какой компилятор у ТС, но если поддерживается, то пусть пользуется. Всё что поставляется с компилятором и включено в стандартные библиотеки - достаточное условие, чтобы доверять и пользоваться.
An1ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рабочая область в free pascal candalik Паскаль, Turbo Pascal, PascalABC.NET 3 18.12.2010 19:12
Рабочая температура видеокарты. СисТемникс Компьютерное железо 2 11.11.2010 11:33
Рабочая папка БД Grom БД в Delphi 5 05.11.2007 20:39