3 / 3 / 0
Регистрация: 22.05.2013
Сообщений: 13
1

Преобразование типов

11.07.2013, 14:31. Показов 678. Ответов 5
Метки нет (Все метки)

Доброго времени суток. В программе нужен корректный ввод числа. Если, например вводим буковки - выводится сообщение, далее в цикле - continue. Возник такой вопрос: Если мы преобразуем char в double функцией atof(string), при удачном преобразовании возвращается не ноль, но если мне НУЖНО ввести ноль, опять же возвратится ноль, как построить условие? Также при преобразовании если atof находит хоть одно число возвращается не ноль. То-есть:

char str[10];
double number;

cout<<" String: "; // допустим ввели jkfds478kl
cin>>str;
number = atof(str);
if(atof(str) != (0,0))
cout<<" Number: "<<number;
// покажет 478, но ввод то явно некорректный!
// также, если мы введём ноль - условие не сработает, а мне это число тоже нужно.


Подскажите пожалуйста, как преобразовать условие и не создавая при этом шаблонов и т.п.
Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2013, 14:31
Ответы с готовыми решениями:

Преобразование типов
Как преобразовать массив char message в строку char *strmessage ?????

Преобразование типов
Здравствуйте! Подскажите как преобразовать тип данных: World в double вот код DLL которую я пишу: ...

Преобразование типов
Доброго времени суток, у меня вопрос возник из нежелания переписывать довольно большой кусок кода....

Преобразование типов
С учебника переписал код на применение структур, но возникла проблема с преобразованием типов. Вот...

5
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
11.07.2013, 14:34 2
Тут, наверное, проще сразу считывать в double и следить за потоком.
0
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,726
11.07.2013, 14:38 3
takeN, забыть про atof. Есть sscanf, istringstream, stod...
0
3 / 3 / 0
Регистрация: 22.05.2013
Сообщений: 13
11.07.2013, 14:46  [ТС] 4
gray_fox, а какая из этих функций решит проблему? Желательно чтобы возвращала true/false.
0
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,726
11.07.2013, 15:04 5
takeN, проще как Croessmah предложил:
C++
1
2
3
4
5
std::cin >> number;
if (!std::cin) {
   std::cerr << "Bad input" << std::endl;
   std::exit(EXIT_FAILURE);
}
Но если надо именно из строки считать, то sscanf:
C++
1
2
3
4
if (std::sscanf(str, "%lf", &number) != 1) {
   std::cerr << "Bad input" << std::endl;
   std::exit(EXIT_FAILURE);
}
Добавлено через 2 минуты
istringstream:
C++
1
2
3
4
5
std::istringstream iss(str);
if (!(iss >> number)) {
   std::cerr << "Bad input" << std::endl;
   std::exit(EXIT_FAILURE);
}
Добавлено через 3 минуты
stod:
C++
1
2
3
4
5
6
try {
    number = std::stod(str);
} catch (std::invalid_argument const&) {
    std::cerr << "Bad input" << std::endl;
    std::exit(EXIT_FAILURE);
}
2
3 / 3 / 0
Регистрация: 22.05.2013
Сообщений: 13
11.07.2013, 15:11  [ТС] 6
gray_fox, спасибо большое, надеюсь удастся условие расписать)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2013, 15:11
Помогаю со студенческими работами здесь

Преобразование типов.
Всем привет. Суть вопроса - ответ программы должен содержать только два знака после запятой. ...

Преобразование типов
есть следующая маленькая программка #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace...

С++ преобразование типов
Есть переменная целочисленного типа например int A(например 2356).Нужно преобразовать ее к типу...

Преобразование типов
кое-что о преобразовании типов. float F; __int32 DW; DW=*(__int32 *)&amp;F; значение DW должно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru