0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 2
1

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

20.01.2018, 19:34. Показов 921. Ответов 3
Метки нет (Все метки)

Начал изучать С++ недавно, написал игрушку Быки-Коровы, но столкнулся с проблемой. Когда вводят в консоль слово программа багает и зацикливается. Подскажите как добавить проверку введено число или слово.
Буду так-же рад вашим советам и указаниям на ошибки. Вот код:
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
84
85
86
87
#include "stdafx.h"
#include "iostream"
#include "windows.h"
#include "time.h"
using namespace std;
 
 
int main()
{
    srand(time(NULL));
    int u = 2, o, c, b, h = 1, y = 1, j = 0, bulls, cows;
    const int n = 4;
    char num[10] = { '0','1', '2', '3', '4', '5', '6', '7', '8', '9' };
    char f[128] = "";
    int a[n];
    int t[n];
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    printf("Введите число от 1000 до 9999: ");
    scanf_s("%d", &b);
 
    do
    {
        c = rand() % (9999 - 1000) + 1000;
        o = 10000;
        for (int i = 0; i < n; i++)
        {
            t[i] = (c%o - c % (o / 10)) / (o / 10);
            a[i] = (b%o - b % (o / 10)) / (o / 10);
            o /= 10;
        }
    } while (t[0] == t[1] || t[0] == t[2] || t[0] == t[3] || t[1] == t[2] || t[1] == t[3] || t[2] == t[3]);
 
        while (y)
        {
            do
            {
                if (b < 1000 || b > 9999 )
                {
                    u = 2;
                    printf("Число не подходит!\n\n");
                    printf("Ваше число: ");
                    scanf_s("%d", &b);
                    o = 10000;
                    for (int i = 0; i < n; i++)
                    {
                        a[i] = (b%o - b % (o / 10)) / (o / 10);
                        o /= 10;
                    }
                }
                else
                {
                    u--;
                }
            } while (u > 1);
 
            bulls = 0;
            cows = 0;
            if (b == c)
            {
                printf("You guessed\n");
                printf("You Win!\n");
                return 0;
            }
            else
            for (int i = 0; i < n; i++)
            {
             if (a[i] == t[i])
                    bulls++;
                else if (a[i] == t[0] || a[i] == t[1] || a[i] == t[2] || a[i] == t[3])
                    cows++;
            }
            printf("Bulls:%d ", bulls);
            printf("Cows:%d \n", cows);
            printf("\n");
            printf("Введите следующее число: ");
            scanf_s("%dn", &b);
            o = 10000;
            for (int i = 0; i < n; i++)
            {
                a[i] = (b%o - b % (o / 10)) / (o / 10);
                o /= 10;
            }
        }
        system("Pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2018, 19:34
Ответы с готовыми решениями:

Проверка введено ли число
Подскажите как сделать чтобы при нажатии кнопки проверялись поля Edit, если введено число(как...

Проверка на то, что введено число, а не символ не работает
Уходит в бесконечный цикл! Если введен символ, вместо цифр. Как исправить? Нужно, что бы была...

Проверить,число введено или нет.
Ребята а как проверить ввел я число в массиве или символ???

Ввод в массив char слов,пока не введено слово "done"
Пытался реализовать подсчет слов на основе пробелов,но цикл считает и слово &quot;done&quot;.Как...

3
12 / 12 / 6
Регистрация: 15.01.2015
Сообщений: 36
20.01.2018, 20:58 2
Смотря что для вас является словом , самое просто это проверить , являются все символы в строке числами , ил первый минус , что тоже не подходит , наличие .(453.47) итд...
1
0 / 0 / 0
Регистрация: 20.01.2018
Сообщений: 2
21.01.2018, 00:21  [ТС] 3
Цитата Сообщение от denistymchuk Посмотреть сообщение
Смотря что для вас является словом , самое просто это проверить , являются все символы в строке числами , ил первый минус , что тоже не подходит , наличие .(453.47) итд...
Даа.. со знаками тоже проблемы. Но я не знаю способа как проверить является ли введенная переменная числом или нет, я пытался разными способами но у меня не получалось ибо не хватает знаний и опыта.
Почему-то не могу редактировать тему, вот код без лишнего:
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
84
85
#include "stdafx.h"
#include "iostream"
#include "windows.h"
#include "time.h"
using namespace std;
 
 
int main()
{
    srand(time(NULL));
    int u = 2, o, c, b, y = 1, bulls, cows;
    const int n = 4;
    int a[n];
    int t[n];
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    printf("Введите число от 1000 до 9999: ");
 
    scanf_s("%d", &b);
    do
    {
        c = rand() % (9999 - 1000) + 1000;
        o = 10000;
        for (int i = 0; i < n; i++)
        {
            t[i] = (c%o - c % (o / 10)) / (o / 10);
            a[i] = (b%o - b % (o / 10)) / (o / 10);
            o /= 10;
        }
    } while (t[0] == t[1] || t[0] == t[2] || t[0] == t[3] || t[1] == t[2] || t[1] == t[3] || t[2] == t[3]);
 
        while (y)
        {
            do
            {
                if (b < 1000 || b > 9999 )
                {
                    u = 2;
                    printf("Введенное число не подходит!\n\n");
                    printf("Ваше число: ");
                    scanf_s("%d", &b);
                    o = 10000;
                    for (int i = 0; i < n; i++)
                    {
                        a[i] = (b%o - b % (o / 10)) / (o / 10);
                        o /= 10;
                    }
                }
                else
                {
                    u--;
                }
            } while (u > 1);
 
            bulls = 0;
            cows = 0;
            if (b == c)
            {
                printf("Вы отгадали\n");
                printf("Победа!\n");
                return 0;
            }
            else
            for (int i = 0; i < n; i++)
            {
             if (a[i] == t[i])
                    bulls++;
                else if (a[i] == t[0] || a[i] == t[1] || a[i] == t[2] || a[i] == t[3])
                    cows++;
            }
            printf("Быков:%d ", bulls);
            printf("Коров:%d \n", cows);
            printf("\n");
            printf("Введите следующее число: ");
            scanf_s("%dn", &b);
            o = 10000;
            for (int i = 0; i < n; i++)
            {
                a[i] = (b%o - b % (o / 10)) / (o / 10);
                o /= 10;
            }
        }
        system("Pause");
}

0
12 / 12 / 6
Регистрация: 15.01.2015
Сообщений: 36
21.01.2018, 22:25 4
Чтобы проверить можно было после ввода используйте строку (string)
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
#include<iostream>
#include<stdexcept>
#include<string.h>
using namespace std;
 
///...Ваш код
int main()
{
int b;
bool trueNumber = 1;//является ли число правильным
string inputString;
cin >> inputString;
/*
Здесь идеть проверка , можно проверять вот так 
*/
/*for(int i = 0;i < (int)inputString.length();i++)
{
    if(!(inputString[i] >= '0' && inputString[i] <= '9'))//так как число > 0
    {
     ///Это не целое число(возможно отрицательное) , или не число вообще
      trueNumber = 0;
     }
}*/
//дальше решение чуть по - лчше
 
   try
   {
   b = stoi(inputString);//я не писал try catch ,
   }
   catch(const std::invalid_argument& err)
   {
        cout << "Not a number";
        return 0;//выходим из программы
   }
   catch(const std::out_of_range& err)
   {
       cout << "Out of range";
       return 0;
   }cout << "Success";
}
 
 
///...Ваш код
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2018, 22:25
Помогаю со студенческими работами здесь

Заполнять массив строк пока не будет введено слово "stop".
Проблема такая. Надо создать векторный массив с типа string. Пользователь должен вводит любые...

Ввести x,y и в зависимости от того что введено - вывести 0 , 1 , или 2
Помогите сделать задачку...в зависимости какой будет х и y выводится на екран число. Я думал мб...

В txt-файле найти заданное слово или фразу и поменять её на другое слово или фразу
Привет народ! Помогите чем сможете. Короче нужна программа, которая в txt-файле ищет заданное слово...

Определить, что было введено — знак, цифра, заглавная или прописная буква
Здравствуйте. Вот программа показывает буква введена или цифра . Помогите сделать что-бы она ещё и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru