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

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

Войти
Регистрация
Восстановить пароль
 
 
Stereotip
2 / 2 / 0
Регистрация: 17.04.2012
Сообщений: 22
#1

Проверка на ввод символа - C++

01.07.2013, 18:17. Просмотров 993. Ответов 19
Метки нет (Все метки)

При вводе какого либо символа программа уходит в прострацию надо что бы программ распазновала что это символ и выводила error
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
int main()
 
 
{
    unsigned int choice;
    
    srand(time(NULL));
    
    std::cout << "To Play write 1, end game 2" << std::endl;  std::cin >> choice;
    
    if ((choice > 2) && (choice < 1))
        
    {  
       std:: cout << "wrong number" << std::endl;
       return main();
    }
    
    else if(choice == 2) {std::cout << "Exit"; return 0;}
    
    else
    {
       yes_no();
       std::cout << sum_ochkov;
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2013, 18:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка на ввод символа (C++):

Проверка на ввод символа - C++
Пользователь вводит несколько строк (имя, фамилия и тд). Не могу сообразить как реализовать проверку, на то что бы вводимые символы не...

Проверка на ввод символа - C++
Предположим вместо числа был введен символ, тогда после ввода символа пропускается вторая строчка cin&gt;&gt;b; и далее заного перезапускается...

Ввод символа - C++
char b; int c; puts(&quot;Int&quot;); scanf(&quot;%d&quot;, &amp;c); puts(&quot;Char&quot;); b = getchar(); putchar(b); Когда ввел число, система не дает...

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

Ввод специального символа. - C++
Всем привет. У меня вопрос про символ -  Decimal 26 HEX 1A Подскажите как мне его записать в файл.

Проверка символа на повторяемость. - C++
Всем здравствуйте! При разработке программы столкнулся с проблемкой. Задача: На входе имеется массив символов, например,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Amator
1036 / 368 / 9
Регистрация: 11.11.2008
Сообщений: 3,167
Завершенные тесты: 2
01.07.2013, 18:23 #2
А "какой либо символ" - вы пытаетесь ввести не число?
0
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 18:27 #3
Цитата Сообщение от Stereotip Посмотреть сообщение
return main();
Это как понимать?
Цитата Сообщение от Stereotip Посмотреть сообщение
yes_no();
Что за функция?
Это вообще весь код? Он у вас вообще компилировался?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 18:38 #4
Можно запустить всё в "вечный" цикл и ожидать правильного результата ввода:
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
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cstdlib>
#include <limits>
 
int main()
{
    unsigned int choice;
    srand(time(NULL));
 
    std::cin.exceptions(std::ios_base::failbit | std::ios_base::badbit);
    for ( ; ; )
    {
        try
        {
            std::cout << "To Play write 1, end game 2" << std::endl;  std::cin >> choice;
            break;
        }
        catch (std::ios_base::failure e)
        {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << e.what() << std::endl;
        }
    }
 
    if ((choice > 2) && (choice < 1))
    {
        std:: cout << "wrong number" << std::endl;
        return main();
    }
    else if(choice == 2) {
        std::cout << "Exit"; return 0;
    }
}
0
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 19:05 #5
Интересный такой момент
C++
1
2
3
4
5
if ((choice > 2) && (choice < 1)) // При каких обстоятельствах выполнится это условие?
{
     std:: cout << "wrong number" << std::endl;
* * *return main();                      // И что это за вызов такой рекурсивный?
}
xtorne21st, нет там вечного цикла. Вы там break поставили, можно ввести 3 и все удачно завершится
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 19:08 #6
nxtech, main() это тоже функция и может быть ещё раз запущена/перезапущена.

Добавлено через 1 минуту
Цитата Сообщение от nxtech Посмотреть сообщение
xtorne21st, нет там вечного цикла. Вы там break поставили
да ты прям мистер очевидность
0
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 19:09 #7

Не по теме:

Не спорю, может. Но где в этом здравый смысл? Тем более что до return main никогда не добраться



Добавлено через 53 секунды

Не по теме:

капитан очевидность

0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 19:14 #8
Учитывая тот факт, что при неправильном вводе будет ещё раз запущена main():
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
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cstdlib>
#include <limits>
 
int main()
{
    unsigned int choice;
    srand(time(NULL));
 
    std::cin.exceptions(std::ios_base::failbit | std::ios_base::badbit);
    try
    {
        std::cout << "To Play write 1, end game 2" << std::endl;  std::cin >> choice;
    }
    catch (std::ios_base::failure e)
    {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << e.what() << std::endl;
        return main();
    }
    if ((choice > 2) || (choice < 1))
    {
        std:: cout << "wrong number" << std::endl;
        return main();
    }
    else if(choice == 2) {
        std::cout << "Exit"; return 0;
    }
    else
    {
        std::cout << "Play!" << std::endl;
    }
}
Добавлено через 59 секунд
Цитата Сообщение от nxtech Посмотреть сообщение
Не спорю, может. Но где в этом здравый смысл? Тем более что до return main никогда не добраться
переделал - добраться!
0
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 19:16 #9
И опять не верно.

Добавлено через 1 минуту
Что будет если я введу 3? Это ведь не верное значение.

Не сейчас условие выполнится. не прав.
Но все равно это в нормально цикле нужно делать, а не рекурсивно стек забивать
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 19:19 #10
я так полагаю, сработает вот эта инструкция:
C++
1
2
3
4
5
if ((choice > 2) || (choice < 1))
    {
        std:: cout << "wrong number" << std::endl;
        return main();
    }
0
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 19:21 #11
Короче здравого смысла в таком коде все-равно нет. И преподаватель обязательно об этом скажет ТС.

Добавлено через 50 секунд
А вы можете продолжать в том же духе и не обращать внимания на мои высказывания
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 19:23 #12
Цитата Сообщение от nxtech Посмотреть сообщение
Но все равно это в нормально цикле нужно делать, а не рекурсивно стек забивать
Согласен, но автору по сути нужен именно такой вариант.
0
Denisqwwq
38 / 32 / 1
Регистрация: 01.06.2013
Сообщений: 117
01.07.2013, 19:32 #13
Если я правильно понял вопрос автора, то проверку на ввод символа можно осуществить след. образом:
C++
1
2
3
4
5
6
7
    int choice;
    while (!(std::cin >> choice))    
    {
        std::cout << "Error!\n";
    std::cin.clear();
    std::cin.sync();
        }
0
xtorne21st
01.07.2013, 20:26
  #14

Не по теме:

Denisqwwq, как по мне, так std::istream::sync() сильно платформозависимый метод и не всегда даёт должный результат.

0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
01.07.2013, 20:40 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <limits>
 
using namespace std;
 
int main()
{
    cout << "Enter 1 or 2\n";
    int val;
    while ( !(cin >> val) || (val != 1 && val != 2) ) {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    cout << "You entered " << val;
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2013, 20:40
Привет! Вот еще темы с ответами:

Проверка вводимого символа - C++
Привет.Помогите,надо сделать так ,чтобы в консольной программе при вводе цифр,вместо букв,выдавало ошибку

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

Как отследить ввод символа в программу - C++
Программа расчета площади поверхности и объема сферы,требуется ввод радиуса.что делать,если пользователь введет букву или ,например,...

Вопрос по ввод-вывод одного символа - C++
//программа работает с английскими символами, с русскими - возникают проблемы #include&lt;stdio.h&gt; #include&lt;iostream&gt; void main() { ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.07.2013, 20:40
Ответ Создать тему
Опции темы

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