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

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

Войти
Регистрация
Восстановить пароль
 
takeN
3 / 3 / 1
Регистрация: 22.05.2013
Сообщений: 13
#1

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

11.07.2013, 14:31. Просмотров 436. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 14:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование типов (C++):

Преобразование типов - C++
Увидел код в сети, решил откомпилировать. Думаю какой код не важно. вылезла куча ошибок. на это LPSTR ActW = new TCHAR; ругается с...

преобразование типов - C++
Уважаемые специалисты, у меня имеется одна проблема. Есть два числа. double и float. Надо из double вычесть float. Все бы хорошо, но...

Преобразование типов - C++
Как преобразовать char * в float?

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

Преобразование типов. - C++
Всем привет. Суть вопроса - ответ программы должен содержать только два знака после запятой. #include &lt;iostream&gt; using namespace...

Преобразование типов - C++
что-то не пойму почему такая ошибка код такой... .... cnetPars.parse(xml, m_creator, m_name, m_info, m_plane, m_idmap); .... ...

5
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
11.07.2013, 14:34 #2
Тут, наверное, проще сразу считывать в double и следить за потоком.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
11.07.2013, 14:38 #3
takeN, забыть про atof. Есть sscanf, istringstream, stod...
0
takeN
3 / 3 / 1
Регистрация: 22.05.2013
Сообщений: 13
11.07.2013, 14:46  [ТС] #4
gray_fox, а какая из этих функций решит проблему? Желательно чтобы возвращала true/false.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
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
takeN
3 / 3 / 1
Регистрация: 22.05.2013
Сообщений: 13
11.07.2013, 15:11  [ТС] #6
gray_fox, спасибо большое, надеюсь удастся условие расписать)
0
11.07.2013, 15:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 15:11
Привет! Вот еще темы с ответами:

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

преобразование типов - C++
помогите у меня программа выдает ошибки преобразования типов подскажите как должно быть чтоб все работало программа делает перестановки...

Преобразование типов - C++
Цель копировать из одного объекта в другой инофрмацию, типы разные, поэтому приходится приводитьTypeA a; TypeB b; a = *(a*)&amp;b; А вот...

Преобразование типов - C++
Возможно ли преобразовать vector &lt;Transport_Vehicle*&gt; Cars_for_transportation в vector &lt;MotorCar*&gt; Cars_for_transportation


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

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

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