Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2009, 11:14   #1
Ok-ei
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 22
По умолчанию Вопрос про обработку исключений

Доброго всем времени суток...

Пытаюсь считать данные из файла...

Код:
int k;
f>>k;
Возник вопрос:
- как отследить и обработать ситуацию, когда в k пытаются ввести символ;
- как отследить и обработать ситуацию, когда данные в файле кончились и вводить в k уже нечего?
Ok-ei вне форума Ответить с цитированием
Старый 18.08.2009, 11:39   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Ok-ei Посмотреть сообщение
Доброго всем времени суток...

Пытаюсь считать данные из файла...

Код:
int k;
f>>k;
Возник вопрос:
- как отследить и обработать ситуацию, когда в k пытаются ввести символ;
- как отследить и обработать ситуацию, когда данные в файле кончились и вводить в k уже нечего?
По первому немного не понял... ) Вы же сами в программе пишете, когда надо ввести что-то в k = )
По второму: f.eof() - возвращает состояния флага конца файла - истина, если достигнут конец файла и ложь в обратном случае
netrino вне форума Ответить с цитированием
Старый 18.08.2009, 11:46   #3
Ok-ei
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 22
По умолчанию

Спасибо за f.eof()...

По поводу первого:
Хочу, чтобы в k было введено целое чило. Но ведь могут попытаться ввести символ. Как проверить что именно пытаются ввести?
Ok-ei вне форума Ответить с цитированием
Старый 18.08.2009, 11:59   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Может так?
Код:
if (k < 0 || k > 9)
{
  cout <<"Число " << k << ", не верно" << endl;
  return;
}
или

Код:
do
{
  cout << "Введите число: ";
  f >> k;
  if (k < 0 || k > 9)
    cout <<"Число " << k << ", не верно" << endl;
}
while (k >= 0 && k <= 9)
psycho-coder вне форума Ответить с цитированием
Старый 18.08.2009, 12:10   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

2psycho-coder: так вряд ли) если ввести символы, а не цифры, то k просто не изменится.

2Ok-ei: можно использовать исключения
Код:
#include <iostream>

int main()
{
	int k = 0;

	std::cin.exceptions(std::ios::failbit);
	try {
		std::cin >> k;
	} catch (std::ios::failure e) {
		std::cerr << "Input failed" << std::endl;
		return 1;
	}

	std::cout << "K = " << k << std::endl;

	return 0;
}
то же самое можно делать и с объектами fstream =)
netrino вне форума Ответить с цитированием
Старый 18.08.2009, 12:19   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
2psycho-coder: так вряд ли) если ввести символы, а не цифры, то k просто не изменится.
Как это не изменится??? А неявное преобразование что тогда?

Код:
int a = 97; // Код буквы "a"
char b = a; // Буква "a"
int c = b; // Код буквы "a"
psycho-coder вне форума Ответить с цитированием
Старый 18.08.2009, 12:22   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Как это не изменится??? А неявное преобразование что тогда?

Код:
int a = 97; // Код буквы "a"
char b = a; // Буква "a"
int c = b; // Код буквы "a"
Ага, но cin ничего не пихнёт в k, в случае, если не найдёт цифру, так как k это int) Следовательно k не изменится. И потом, ваш пример не учитывает того, что цифры в аски-представлении находятся в пределах 0x30-0x39, а не 0 и 9 и плюс к этому, что будет, если пользователь введёт например 12334? = )

Последний раз редактировалось netrino; 18.08.2009 в 12:25.
netrino вне форума Ответить с цитированием
Старый 18.08.2009, 12:33   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

А так не пойдёт?
Код:
int x;
cin >> x;
if (cin.fail())
{
	cout << "ошибочка вышла";
}
pu4koff вне форума Ответить с цитированием
Старый 18.08.2009, 12:36   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
А так не пойдёт?
Код:
int x;
cin >> x;
if (cin.fail())
{
	cout << "ошибочка вышла";
}
Да, так лучше всего))) У меня как-то с первого раза так не заработало, потому с исключениями написал...
netrino вне форума Ответить с цитированием
Старый 18.08.2009, 12:38   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Ага, но cin ничего не пихнёт в k, в случае, если не найдёт цифру, так как k это int) Следовательно k не изменится.
Значит и проверка не нужна...)
Цитата:
Сообщение от netrino Посмотреть сообщение
И потом, ваш пример не учитывает того, что цифры в аски-представлении находятся в пределах 0x30-0x39, а не 0 и 9 и плюс к этому, что будет, если пользователь введёт например 12334? = )
Да, в шестнадцатеричной системе, а в десятичной в диапазоне 47-57.
Вот тут, действительно не учел.(

P.S. Надо заново изучать С/С++
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про C# BanzoO Общие вопросы C/C++ 1 02.07.2009 03:47
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24
Вопрос про memo Artem Общие вопросы Delphi 1 14.09.2007 10:47