Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
941 / 685 / 229
Регистрация: 28.04.2013
Сообщений: 1,924
1

ввод данных cin >>

19.08.2013, 21:20. Показов 2330. Ответов 4
Метки нет (Все метки)

Приветствую!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
 
int main()
{setlocale (LC_ALL,"");
int qt;
float cost;
 
cout << "Введите количество: "; cin >> qt;
cout << "Введите стоимость: "; cin >> cost;
 
return 0;
}
если пользователь ошибется, и в количестве введет (ну случайно, всякое же бывает) вместо целого числа, число с плавающей запятой, то в программе происходит сбой и запрос стоимости уже не производится.

Почему это происходит? Как с этим бороться?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2013, 21:20
Ответы с готовыми решениями:

Ввод данных в структуру - cin.getline
Добрый день, Задача загрузить информацию в структуку Songs (автор, имя, год) . Однако когда в...

Ввод данных используя цикл while (cin >> )
Здравствуйте, не могу разобрать, как работает одна из инструкций данной программы. Строка с циклом...

Ввод данных используя цикл while (cin >> )
Здравствуйте, не могу разобрать, как работает одна из инструкций данной программы. Строка с циклом...

Ввод cin данных в кодировке windows
Здрааствуйте, Подскажите пожалуйста, ввожу данные через консоль через cin: string...

4
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
19.08.2013, 21:26 2
Цитата Сообщение от reisal78 Посмотреть сообщение
Почему это происходит?
потому что в переменную типа int пытаетесь запихнуть вещественное число. целые числа не подразумевают наличе десятичной точки, или каких-то других символов, кроме цифр или знака числа(и тот первым идти должен)
Цитата Сообщение от reisal78 Посмотреть сообщение
Как с этим бороться?
один из возможных вариантов - считывать строку и с ней уже разбиратся
0
Модератор
Эксперт С++
11093 / 9143 / 5494
Регистрация: 18.12.2011
Сообщений: 24,431
19.08.2013, 21:28 3
При вводе целого числа любой нецифровой символ явлается ограничителем
(в т.ч. и точка).
В результате в переменную qt записывается целая часть (до точки).
А дробная часть (после точки) записывается в cost.
1
233 / 215 / 63
Регистрация: 01.09.2012
Сообщений: 2,103
19.08.2013, 21:29 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Readint()
{
    unsigned int a;
    cin >> a;
    if (!cin)
    {
        cin.clear();
        while (cin.peek() !='\n')
            cin.ignore();
        cin.ignore();
    }
    return a;
}
можно так
пишем
C++
1
qt = Readint();
1
941 / 685 / 229
Регистрация: 28.04.2013
Сообщений: 1,924
19.08.2013, 21:35  [ТС] 5
Ага, воде становится понятным... если я в количество ввожу дробное число (например 32.5), то целая часть запишется в переменную qt станет равно 32, а дробная часть уйдет в переменную cost, и ее значение станет 0.5.
Поэтому, 2й cin и не срабатывает...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2013, 21:35

Ввод через пробел. Как остановить ввод. while(cin >> input)
Здравствуйте. Начну с условия задания. Ввести к-во элементов массива. Заполнить массив....

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод....

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не...


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

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

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