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

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

Войти
Регистрация
Восстановить пароль
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
#1

функция _atold() - C++

28.11.2012, 03:07. Просмотров 968. Ответов 3
Метки нет (Все метки)

Здравствуйте! Такая проблема. Не могу понять как работает функция _atold(), в задании указано что необходимо её использовать, однако она не работает. Компилятор её идентифицирует. Еще хочу отметить, что задача идет в учебнике до темы "указатели", следовательно решить её необходимо не используя оные. Задание не суть, суть в том, что значение массива char необходимо перевести в long double, что должна делать функция _atold(), но она это по какой то причине не делает. Помогите пожалуйста.
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
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <string.h>
using namespace std;
 
long double mstold(char [], char []);
 
int main()
{
 char cmas[80];
 char tmas[80];
 gets(cmas);
 mstold( cmas, tmas );
 cout << tmas << endl;
 system("PAUSE");
 return 0;
 
}
long double mstold( char cmas[], char tmas[] )
 {
  int len = strlen(cmas);
  int g;
  int i = 0;
  char emas[11] = { '.', '0','1','2','3','4','5','6','7','8','9' };
  for ( g = 0; g < len; g++ )
  {
  for ( int j = 0; j < 12; j++ )
   if ( cmas[g] == emas[j] )
   {
    tmas[i] = cmas[g];
    i++;
   }
  }
  _atold(tmas);
  return tmas;
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 03:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос функция _atold() (C++):

Перегрузка операций: friend-функция или функция-член класса - C++
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и friend. Вот к примеру такой код. class...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений - C++
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

Функция sqrt: существует более одного экземпляра. Функция перегруженная - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main(){ float s, p; int c, a; s=0; ...

какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() - C++
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

что за функция такая strstr? или это не функция? - C++
void search(sp *list){ sp *prt = list; char f,r; cout&lt;&lt;Rus(&quot;введите текст&quot;)&lt;&lt;endl; cin&gt;&gt;f; cout&lt;&lt;Rus(&quot;введите выходной...

Чистая виртуальная функция функция не имеет оператора переопределения - C++
Пишу программу для записи заметок. Есть 2 класса: Page и Note. Note наследуется от Page. Page.h #pragma once ...

3
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
28.11.2012, 11:43 #2
_atold() не знаю. Да и без указателей чтобы совсем уж, не получается:
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
#include <iostream>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
long double mstold();
long double mstold(char []); 
int main()
{
const int sz=80;
char tmas[sz]={'\0'};
int indDig=0;
cout<<"Enter the string of the array elements."<<endl;
cout<<"The array elements - diggits or decimal separator \".\"."<<endl;
cout<<"Note:"<<endl;
cout<<"An any no diggital sumbol, or an extra \".\" will be excluded from output number,"<<endl;
cout<<"as well as all diggits after them."<<endl;
cout<<"Pressing \"Enter\"  - You will"<<endl;
cout<<"finish the string input session!"<<endl;
int commaCount=0;
char someSumb;
for(int i=0; i<sz; i++){
someSumb=getchar();
if(someSumb=='.')commaCount++;
if(commaCount>1){
break;
}
if(!isdigit((int)someSumb)&&'.'!=someSumb){
break;
}
tmas[i]=someSumb;
}
cout<<endl<<"The entered string is ";
cout<<tmas;
cout<<endl<<"The string lengtn as strlen(tmas) is "<<strlen(tmas)<<endl;
double dblRezult=mstold(tmas);
printf("%10.10f",dblRezult);
cout<<endl;
//printf("%10.10f",mstold());//вызов старой версии) 
cout << endl;
system("PAUSE");
return 0;
}
long double mstold(){//эту версию оставил т.к. она ближе к Вашему коду, т.е. понятнее. Можете вызвать и посмотреть
char emas[11] = { '.', '0','1','2','3','4','5','6','7','8','9' };
cout<<"An array-string length is "<<strlen(emas)<<endl;
char** endConv=(char**)emas[strlen(emas)];
double dbl=strtod(emas,endConv);
 return dbl;
}
long double mstold(char emas[]){
char** endConv=(char**)emas[strlen(emas)];//Совсем без указателя не обойтись...
double dbl=strtod(emas,endConv);
return dbl;
}
1
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
28.11.2012, 17:14  [ТС] #3
я не изучал указатели, так как в книге которую я сейчас изучаю они идут 2мя главами позже. Так что я ничего не понимаю из того, что вы мне предлагаете.

Поясню еще раз, что собственно я хочу сделать. В моем коде есть массив tmas в него собственно будет скопированы все введенные пользователем цифры и плавающая десятичная точка, то есть если мы введем $123,456.50 в массиве tmas окажется только 123456.50. А у меня вопрос каким образом можно значение этого массива перевести в тип long double используя функцию _atold или другую. Пусть и с использованием указателей, но применительно к моему коду, чтобы я хоть что нибудь понял. Было бы здорово если бы кто - нибудь показал как передать указатель на весь массив tmas в функцию _atold ведь на сколько я знаю имя массива это есть указание на его первый элемент

Добавлено через 39 минут
так же если я использую такую операцию как присвоение результата работы функции _atold() для tmas, то выскакивает ошибка "invalid floating point operation" и программа виснет. Я конечно решу эту задачу сам изучив указатели, но хотелось бы перейти к их изучению закончив это задание. HEEEEELP.
0
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
30.11.2012, 19:22  [ТС] #4
Я нашел способ заставить программу работать. Но однако не понял почему она не работала раньше. Взгляните пожалуйста на код.
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
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
using namespace std;
 
long double mstold(char [], char [], long double c);
 
int main()
{
 char cmas[80];
 char tmas[80];
 for( int g = 0; g < 80; g++ )
  tmas[g] = 0;
 long double c;
 gets(cmas);
 mstold( cmas, tmas, c );
 c = _atold(tmas);
 cout << fixed << showpoint << setprecision ( 3 ) << c << endl;
 system("PAUSE");
 return 0;
 
}
long double mstold( char cmas[], char tmas[], long double c )
 {
  int len = strlen(cmas);
  int g;
  int i = 0;
  char emas[11] = { '.', '0','1','2','3','4','5','6','7','8','9' };
  for ( g = 0; g < len; g++ )
  {
  for ( int j = 0; j < 12; j++ )
   if ( cmas[g] == emas[j] )
   {
    tmas[i] = cmas[g];
    i++;
   }
  }
  }
суть программы следующая: она получает от пользователя строку вида: $ 1,233,432.332 ( например ), затем копирует из этой строки только цифры и точку в другую строку то есть получается 1233432.332. Далее программа переводит значение строки в тип long double присваивая это значение переменной "c". Однако если совершить операцию c = _atold( tmas ); внутри метода mstold и попытаться вернуть значение, а после вывести его на экран, компилятор выдаст ошибку. invalid floating point operation. Может кто сказать почему?
0
30.11.2012, 19:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 19:22
Привет! Вот еще темы с ответами:

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов - C++
Write программу с использованием класса Вектор (не без помощи форумчанина), но необходимо создать производный класс, в котором реализована...

Функция заполняющая массив и функция вывода массива - C++
Напишите две функции. Первая функция заполняет массив, вторая функция выводит массив на экран

Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива - C++
Есть программа #include &lt;iostream&gt; #include &lt;algorithm&gt; const int N = 5; int handSet(void) { int a; std::cout...

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел - C++
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих функций с различными параметрами. Для...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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