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

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

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

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

01.07.2013, 18:17. Просмотров 943. Ответов 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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2013, 18:17     Проверка на ввод символа
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Amator
1036 / 368 / 9
Регистрация: 11.11.2008
Сообщений: 3,166
Завершенные тесты: 2
01.07.2013, 18:23     Проверка на ввод символа #2
А "какой либо символ" - вы пытаетесь ввести не число?
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 18:27     Проверка на ввод символа #3
Цитата Сообщение от Stereotip Посмотреть сообщение
return main();
Это как понимать?
Цитата Сообщение от Stereotip Посмотреть сообщение
yes_no();
Что за функция?
Это вообще весь код? Он у вас вообще компилировался?
xtorne21st
интересующийся
303 / 274 / 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;
    }
}
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 и все удачно завершится
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 19:08     Проверка на ввод символа #6
nxtech, main() это тоже функция и может быть ещё раз запущена/перезапущена.

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

Не по теме:

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



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

Не по теме:

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

xtorne21st
интересующийся
303 / 274 / 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 никогда не добраться
переделал - добраться!
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 19:16     Проверка на ввод символа #9
И опять не верно.

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

Не сейчас условие выполнится. не прав.
Но все равно это в нормально цикле нужно делать, а не рекурсивно стек забивать
xtorne21st
интересующийся
303 / 274 / 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();
    }
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
01.07.2013, 19:21     Проверка на ввод символа #11
Короче здравого смысла в таком коде все-равно нет. И преподаватель обязательно об этом скажет ТС.

Добавлено через 50 секунд
А вы можете продолжать в том же духе и не обращать внимания на мои высказывания
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 19:23     Проверка на ввод символа #12
Цитата Сообщение от nxtech Посмотреть сообщение
Но все равно это в нормально цикле нужно делать, а не рекурсивно стек забивать
Согласен, но автору по сути нужен именно такой вариант.
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();
        }
xtorne21st
01.07.2013, 20:26
  #14

Не по теме:

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

Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
Denisqwwq
38 / 32 / 1
Регистрация: 01.06.2013
Сообщений: 117
01.07.2013, 20:40     Проверка на ввод символа #16
xtorne21st, не могу не согласиться

вариант с
C++
1
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
намного практичней, но и в нём подводных камней хватает.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.07.2013, 21:04     Проверка на ввод символа #17
Olivеr, в этом случаи в теле while при невыполнении инструкции (val != 1 && val != 2) будет выполнено условие цикла, в чём, собственно, нет особой необходимости.
Stereotip
2 / 2 / 0
Регистрация: 17.04.2012
Сообщений: 22
02.07.2013, 00:43  [ТС]     Проверка на ввод символа #18
согласен с return main() вышло круто)) а можно поинтересоваться литературу в которой описано написанное вами??

Добавлено через 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <cstdlib>
#include <ctime>
 
 
#define kolvo 9
 
int sum_ochkov = 0;
char* card[kolvo] = {"6","7","8","9","10","Jack","Queen","King","Ace"};
int ves_card[kolvo] = {6 , 7 , 8 , 9 , 10 , 2 , 3 , 4 , 11};
 
 
 
int random_card()
 
 
{
            int number = 0;
            int ochkov = 0;
            number = rand()%9;
            ochkov += ves_card[number];
            std::cout << "Card ---- " << card[number] << " ---- " << std::endl;
            return ochkov;
}
 
 
 
char yes_no()
 
 
{
        char ask;
        std::cout << "Do you need a card y or n ???" << std:: endl; std::cin >> ask;
        if (ask == 'y')
        {
            int ochkov = random_card();
            sum_ochkov += ochkov;
            std::cout << "Symma ochkov ravna = " << sum_ochkov << std::endl;
            if (sum_ochkov > 21)  {std::cout << "-----Surplus-----" << std::endl; return sum_ochkov;}
 
            else if (sum_ochkov == 21) {std::cout << "*****OchkO*****" << std::endl; return sum_ochkov;}
 
            yes_no();
        }
        else if (ask == 'n')
        {
            if (sum_ochkov < 21) {std::cout << "*****Nedobor*****" << std::endl;}
            return sum_ochkov;
 
        }
        else
        {
            std::cout << "wrong symbol" << std::endl;
            return yes_no();
        }
}
 
int start_game()
{
    unsigned int choice;
 
    std::cout << "To Play write 1, end game 2" << std::endl;  std::cin >> choice;
 
    if (choice >= 2 || choice < 1)
 
    {
 
       if (choice == 2) {std::cout << "Exit"; return 0;}
 
       else {std:: cout << "wrong number" << std::endl; start_game();}
    }
 
 
 
    else{yes_no();std::cout << sum_ochkov;}
}
int main()
 
 
{
        srand(time(NULL));
        start_game();
}
SatanaXIII
Супер-модератор
Эксперт С++
5594 / 2628 / 240
Регистрация: 01.11.2011
Сообщений: 6,469
Завершенные тесты: 1
02.07.2013, 08:39     Проверка на ввод символа #19
Цитата Сообщение от Stereotip Посмотреть сообщение
литературу в которой описано написанное вами?
Литература C++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 08:42     Проверка на ввод символа
Еще ссылки по теме:

Ввод символа в переменную типа INT - C++
Доброго времени суток. Подскажите самый эффективный способ борьбы с неверным вводом данных пользователем. А именно когда пользователя...

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

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

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

Проверка на наличие символа '\' в строке - C++
VS2015 if (a == '\').... и начинается веселье... почему попытка проверить что символ является '\' выдается ошибка?


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

Или воспользуйтесь поиском по форуму:
Stereotip
2 / 2 / 0
Регистрация: 17.04.2012
Сообщений: 22
02.07.2013, 08:42  [ТС]     Проверка на ввод символа #20
большое спасибо такой темы не находил.
Yandex
Объявления
02.07.2013, 08:42     Проверка на ввод символа
Ответ Создать тему
Опции темы

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