Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/256: Рейтинг темы: голосов - 256, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
1

Проверка ввода целого числа

17.02.2009, 03:54. Показов 46975. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться, плиз... есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using std::endl;
using std::cout;
using std::cin;
 
void main()
{
int i;
cout << "Enter integer value" << endl;
cin >> i;
}
Как отловить ошибку ввода целочисленного числа максимально стандартными средствами? Можно ли это сделать не подключая другие библиотеки? Ищу самое простое решение... Заранее спасибо всем
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2009, 03:54
Ответы с готовыми решениями:

Функции ввода целого числа и расчёт куба числа
Написать код программы, которая реализует 2 функции, в первой производится ввод целого числа, во...

Фильтр для ввода целого числа в данном диапазоне
# include &lt;iostream&gt; # include &lt;locale&gt; using namespace std; int main () { setlocale...

Исключения. Проверка на правильность введения целого числа
Надо сделать в программе несколько исключений. Одно из них должно срабатывать если вместо...

Составить программу ввода целого числа в диапазоне от 0 до 9 и печати его словесной формы
Добрый вечер! Помогите пожалуйста написать простенькую программу на с++ Не могу разобраться,...

8
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
17.02.2009, 11:11 2
Все что ты вводишь в консоли только потом с помощью обычных операций скрыто приводится к нужному тебе типу. Поэтому можешь сделать это сам, например, проверить, что введенная строка не содержит никаких запрещенных символов.
0
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
17.02.2009, 15:09  [ТС] 3
Хорошо, а можно ещё вопрос... Вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int x;                            
bool success = false;
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
cout << "Введите значение" << endl; 
while(!success)
{
    cin >> x;        
    if(cin.good())
    {
        cout << "Вы ввели значение " << x << endl; 
        success = true;
    }
    else    
    {
        cout << "Значение введено неверно. Повторите ввод" << endl;
    }
}
Как бы его заставить нормально работать? После ввода неверного значения получается бесконечный цикл с выводом сообщения о невером значении... ума не приложу почему.

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
0
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 30
18.02.2009, 22:15 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
ммм...я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
0
6 / 6 / 1
Регистрация: 14.11.2008
Сообщений: 82
18.02.2009, 23:07 5
так немножко проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main()
{
 
 
     int input;
 
     cout << "Введите число" << endl;
     cin >> input;
     if(!cin.fail())
      cout << "Введено целое число: " << input << endl
             << "Бит ошибки потока равен: " << cin.fail()<< endl;
 
     else
      cout <<"Введена кракозябра"<< " :)\n"
             << "Бит ошибки потока равен: " << cin.fail() << endl;
}
1
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
20.02.2009, 02:00  [ТС] 6
Цитата Сообщение от Юляшка Посмотреть сообщение
я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
Где именно тебе не понятно что я делаю?
0
17 / 17 / 0
Регистрация: 14.02.2009
Сообщений: 86
20.02.2009, 10:33 7
Цитата Сообщение от voff4igg Посмотреть сообщение
Хорошо, а можно ещё вопрос... Вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int x; 
bool success = false;
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
cout << "Введите значение" << endl; 
while(!success)
{
cin >> x; 
if(cin.good())
{
cout << "Вы ввели значение " << x << endl; 
success = true;
}
else 
{
cout << "Значение введено неверно. Повторите ввод" << endl;
}
}
Как бы его заставить нормально работать? После ввода неверного значения получается бесконечный цикл с выводом сообщения о невером значении... ума не приложу почему.

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
char input[10];
int value = INT_MIN;
cout << "Введите число" << endl;
cin >> input;
value = atoi(input);
cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
while(!success)
{
cin >> x; 
if(cin.good())
{
cout << "Вы ввели значение " << x << endl; 
success = true;
}
else 
{
cout << "Значение введено неверно. Повторите ввод" << endl;
}
}
попробуй присваивать false флагу success при неверном вводе

Добавлено через 9 минут 33 секунды
Цитата Сообщение от voff4igg Посмотреть сообщение

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
http://www.cplusplus.com/refer... /atoi.html
> If no valid conversion could be performed, a zero value is returned.
Поставь проверку на ноль результата вызова atoi(input).
0
Smart is the new Sexy
32 / 32 / 1
Регистрация: 29.12.2008
Сообщений: 109
20.02.2009, 14:40 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
void main()
{
int x;                              
bool success = false;  
  
system("chcp 1251");  
  
cout << "Введите значение" << endl;   
while(!success)  
{  
    cin >> x ;          
    if(cin.good())  
    {  
        cout << "Вы ввели значение " << x << endl;   
        success = true;  
    }  
    else 
        cout << "Значение введено неверно. Повторите ввод" << endl; 
        cin.clear();
        _flushall();
} 
}
Могу предложить такое решение проблемы первой задачи. У тебя цикл начинал зацикливатся, потому что поток был занят. Ты вводил неверный символ, и он оставался в потоке. Затем Cin >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Код
        cin.clear();
        _flushall();
3
1 / 1 / 0
Регистрация: 04.12.2008
Сообщений: 5
05.10.2010, 17:35 9
Могу предложить такое решение проблемы первой задачи. У тебя цикл начинал зацикливатся, потому что поток был занят. Ты вводил неверный символ, и он оставался в потоке. Затем Cin >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Код
        cin.clear();
        _flushall();
А не подскажете как такое же осуществить в JAVA?
1
05.10.2010, 17:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2010, 17:35
Помогаю со студенческими работами здесь

Проверка ввода числа на корректность
На отрицательность число проверил. Если ввожу отрицательное, то выводится сообщение: &quot;Вы ввели...

Проверка правильности ввода числа
Здравствуйте. Помогите с функцией проверки ввода на число. Число любое (целое, дробное).

Проверка правильности ввода числа
Всем привет! Прошу помочь с такой задачей: Дано число в двоичной системе счисления. Проверить...

Проверка на корректность ввода числа
Здравствуйте. Помогите решить данную проблему. Есть длинное число, хочу проверить, чтобы вводились...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru