Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
9 / 9 / 7
Регистрация: 23.11.2012
Сообщений: 94
1

Функция _atold() не работает

28.11.2012, 03:07. Показов 5252. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Такая проблема. Не могу понять как работает функция _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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2012, 03:07
Ответы с готовыми решениями:

Функция корректно работает в Delphi 7 и не неверно работает в RAD Studio 10
Переписываю свою программу с Delphi 7 под RAD Studio 10. Столкнулся с проблемой - функция в...

Функция cin.get(array, 80) работает в одной программе, но не работает в другой
Добрый день. Я что то совсем запутался, одна и та же функция в одной программе работает, а в...

Стандартная функция delete в Eclipse работает а в AndroidStudio не работает
case R.id.btnDelete: {//Кнопка удаление последнего символа ...

В VS 2015 не работает рекурсивная функция, которая работает в C++Builder
Добрый день! Перенес блок кода из старого учебного проекта под C++Builder, который там всегда...

4
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
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
9 / 9 / 7
Регистрация: 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
9 / 9 / 7
Регистрация: 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. Может кто сказать почему?
1
0 / 0 / 2
Регистрация: 19.03.2018
Сообщений: 10
26.04.2018, 21:02 5
В первом примере надо возвращать long doble, а не массив tmas
C++
1
2
3
4
5
  }
  }
  _atold(tmas);
  return tmas;
 }
Возможно так будет работать

C++
1
2
3
4
  }
  }
  return _atold(tmas);
 }
0
26.04.2018, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2018, 21:02
Помогаю со студенческими работами здесь

Как функция работает,в обработчике не работает
В таком виде все прекрасно работает (function ($) { $.fn.percent = function...

Функция MapAndLoad() работает с dll-файлом, не работает с exe-файлом
Доброго времени суток. Объясните, почему программа #include &lt;windows.h&gt; #include &lt;imagehlp.h&gt;...

не работает функция
Доброго времени суток! Ребят не работает UPDATE в функции public static function updateEdit...

Не работает функция
Добрый день. Потихоньку изучаю ООП. И столкнулся с такой проблемой: Есть два файла: 1)#include...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru