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

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

Войти
Регистрация
Восстановить пароль
 
zinador
2 / 2 / 0
Регистрация: 15.11.2009
Сообщений: 100
#1

-1.#IND при возвращении значения функции - C++

06.05.2011, 04:45. Просмотров 1079. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
using namespace std;
float res=0;
 
float number()
{
char c=cin.get();
     if(c>='0' && c<='9')
    {
     res=res*10+c-'0';
     number();
    }
    else
    {
cin.putback(c);
return res;
    }
 
}
int main()
{
cout<<number();
}
Здраствуйте форумчане,непойму почему когда ввожу число возвращает всегда -1.#ind
причем если изменить тип функции number() с float на int тогда функция работает правильно в чем причина подскажите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2011, 04:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос -1.#IND при возвращении значения функции (C++):

Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? - C++
Вопрос такой, почему в методе setnamedisc нужно использовать char *s для установки значения, а при возвращении значения в методе...

Ошибка при возвращении ссылки из функции - C++
Когда функция возвращает ссылку, то ее можно использовать с левой стороны от знака &quot;=&quot;. Только не пойму почему не работает ...

Ошибка bad ptr при возвращении занчения из функции - C++
Помогите по функции, не возвращает значения, вот как объявлена функция и вот как пытаюсь вызвать чтобы получить значение этой самой функции...

Выводит -1.#IND вместо значения переменной - C++
Здравствуйте, очень долго бьюсь с проблемой. заключается она в следующем. Есть ряд Тейлора для sin(x)/x который равен(сразу распишу) sum...

Конструктор копии при возвращении объекта - C++
main(): #include&quot;Class_Taxi.h&quot; #include&lt;vld.h&gt; #include&lt;iostream&gt; #include&lt;locale.h&gt; #define MAX 15 using namespace std; ...

Конструктор копии: при возвращении объекта ошибка памяти - C++
Реализация класса: #include&quot;Class_Taxi.h&quot; #include&lt;fstream&gt; #include&lt;conio.h&gt; using namespace std; Zakaz::Zakaz() { ...

7
Evg
Эксперт CАвтор FAQ
17944 / 6175 / 411
Регистрация: 30.03.2009
Сообщений: 16,952
Записей в блоге: 27
06.05.2011, 09:35 #2
Если пройдёшь по первой ветке if'а (строки 10-11), то у тебя функция ничего не возвратит (т.е. возвратит мусор).
1
-=ЮрА=-
Заблокирован
Автор FAQ
06.05.2011, 09:36 #3
Попробуй сделать вот так:
C++
1
res=res*10+1.0*int(c-'0');
1
Evg
Эксперт CАвтор FAQ
17944 / 6175 / 411
Регистрация: 30.03.2009
Сообщений: 16,952
Записей в блоге: 27
06.05.2011, 10:00 #4
-=ЮрА=-, да хоть что ты не пиши, если у тебя по какой-то ветку не исполняется return, то это не поможет. А использование плавающей единицы в целочисленном выражении - это ещё и не каждый индус до такого додумается.
1
zinador
2 / 2 / 0
Регистрация: 15.11.2009
Сообщений: 100
06.05.2011, 10:30  [ТС] #5
Evg, дело в том что функция она должна возвращать res иммено когда попадается не число,
то есть когда я ввожу число 452 она сначало res равен 4 ,потом res равен 45 и на последок res равен 452,если в функции в блоке елса поставить вывод ,то res выводится и правильный результат у него но когда возвращаю ,вот так получается странно иммено то ,что белебирда выводится когда тип функции float или double,или если не трудно помогите пожалуйста написать код который правильно работает

Добавлено через 19 минут
Все нашел ошибку) я рекурсию вызывал не правильно вместо number(); нужно было return number();
0
-=ЮрА=-
Заблокирован
Автор FAQ
06.05.2011, 12:38 #6
Evg, единицу ввёл т.к. учитывал тип возвращаемого значения 3-я строка
C++
1
float res=0;
, сам часто так делаю для явного преобразования типа переменных.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 13:23 #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
сам часто так делаю для явного преобразования типа переменных
Только вот преобразование произошло к типу double, а нужен float. И чем не устроило настоящее явное преобразование float(c-'0')?
0
Evg
Эксперт CАвтор FAQ
17944 / 6175 / 411
Регистрация: 30.03.2009
Сообщений: 16,952
Записей в блоге: 27
06.05.2011, 16:03 #8
Цитата Сообщение от zinador Посмотреть сообщение
Evg, дело в том что функция она должна возвращать res иммено когда попадается не число
В Си функция если возвращает, то она что-то должна возвращать. Тем более, что результат функции ты печатаешь всегда, а потом удивляешься, почему печатается мусор

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Evg, единицу ввёл т.к. учитывал тип возвращаемого значения 3-я строка
Да, я малость протупил, когда писал про целочисленное выражение. В правой части имеется res типа float, а потому выражение res*10 и так будет иметь тип float и при дальнейшем сложении второе слагаемое автоматически приведётся к float'у. Тем более, как уже говорилось, лучше использовать явное приведение типа, чем умножение на единицу
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2011, 16:03
Привет! Вот еще темы с ответами:

Ошибка -1.#IND при вводе не целого числа - C++
После ввода дробного числа для b в консоли пишется ошибка -1.#IND. При вводе целого числа все считается. В чем причина? При использовании...

Затираются значения при возврате из функции initializer_list - C++
Дарова. Объясните, почему при возврате объекта инитиализер_лист из функции значения этого листа трутся #include &lt;iostream&gt; using...

Вычислить и напечатать значения функции при следующих условиях - C++
Вычислить и напечатать значения функции при следующих условиях Формулы надо переписывать! Редактор формул внизу страницы.

Найти значения функции при заданном шаге агрумента - C++
Решите пожалуйста, с меня конфетка:) Извиняюсь за качество


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
06.05.2011, 16:03
Ответ Создать тему
Опции темы

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