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

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

Восстановить пароль Регистрация
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
28.11.2012, 03:07     функция _atold() #1
Здравствуйте! Такая проблема. Не могу понять как работает функция _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;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 03:07     функция _atold()
Посмотрите здесь:

C++ Функция _atold
Не определяется функция _atold C++
C++ Функция
Функция! C++
C++ функция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
28.11.2012, 11:43     функция _atold() #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;
}
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
28.11.2012, 17:14  [ТС]     функция _atold() #3
я не изучал указатели, так как в книге которую я сейчас изучаю они идут 2мя главами позже. Так что я ничего не понимаю из того, что вы мне предлагаете.

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

Добавлено через 39 минут
так же если я использую такую операцию как присвоение результата работы функции _atold() для tmas, то выскакивает ошибка "invalid floating point operation" и программа виснет. Я конечно решу эту задачу сам изучив указатели, но хотелось бы перейти к их изучению закончив это задание. HEEEEELP.
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
30.11.2012, 19:22  [ТС]     функция _atold() #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. Может кто сказать почему?
Yandex
Объявления
30.11.2012, 19:22     функция _atold()
Ответ Создать тему
Опции темы

Текущее время: 01:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru