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

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

Войти
Регистрация
Восстановить пароль
 
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
#1

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

18.02.2013, 21:18. Просмотров 693. Ответов 10
Метки нет (Все метки)

Есть цикл:
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
struct WvsB{
int PLAYER[N];
int PLAYER1[N];
};
    
---
 
while(ch!='\r'){
 
        cout<<"\nКОМАНДА BLACKWOOD\n\n";
 
        for(int i=0,b=1; i<N; ++i,b++)
        {
            while(true){
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<b<<" ";
 
            cin>>black.PLAYER[i];
            if(cin.fail() || black.PLAYER[i]>70 || black.PLAYER[i]<1)
            {cout<<"\n...еще раз...\n\n"; cin.clear(); cin.ignore(4,'\n'); continue;}
            
            else
            {cin.ignore(10,'\n'); break;}
 
            }       
        }
 
        cout<<"\nКОМАНДА WARFACE\n\n";
 
        for(int j=0,g=1; j<N; j++, g++)
        {
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<g<<" ";
            cin>>warfc.PLAYER1[j];
 
if(cin.fail() || black.PLAYER1[j]>70 || black.PLAYER1[j]<1)
{cout<<"ERROR.. значение = "<< black.PLAYER1[j]; getch(); return 0;}
}
Решил для практики, играя в варфейс написать функцию "Авто баланс команд". Ну вот, первый цикл for работает со всеми проверками нормально а вот второй работает не корректно. Делает подобие пропусков. Может перед тем как инициализировать элементы массивов после ввода надо это сделать до этого? а то я не очень врубаюсь, почему так получается.
Вот пример ошибки:
0
Миниатюры
Проверка ввода чисел  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2013, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка ввода чисел (C++):

Проверка корректности ввода чисел - C++
считывается квадратная матрица с файла Как написать условие в коде,если после пробела идет не число то if(тут какое условие?) { ...

Проверка правильности ввода. Запретить ввод чисел - C++
Здравствуйте форумчане! Хочу сделать в коде проверку типа: если вводить, где положено string -числа, то выходит сообщение &lt;Not...

Visual C++ проверка ввода на число, проверка на кирилицу - C++
Суть ввести с клавиатуры нечто, и повторять ввод до тех пор пока введенное число не будет числом. Этот код проверяет на буквы и знаки,...

Проверка ввода - C++
Как можно проверить вводимые данные, являются ли они числом. Допустим если ввели &quot;08098рррр9&quot; - запросить повторный ввод, а если &quot;43543&quot;...

Проверка ввода - C++
Как ограничить ввод символов в программе!!!! На каждый символ, который был введен выдавать сообщение о неправильном вводе????? Надо чтоб...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
19.02.2013, 00:17  [ТС] #2
Буду рад если кто нибудь все таки ответит.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 00:56 #3
Тут что-то совсем не понятно. Вводите в warfc.PLAYER1, а проверяете black.PLAYER1... А где, вообще, ввод black.PLAYER1?
0
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
19.02.2013, 03:50  [ТС] #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Тут что-то совсем не понятно. Вводите в warfc.PLAYER1, а проверяете black.PLAYER1... А где, вообще, ввод black.PLAYER1?
Видимо я вас запутал, я скопировал верхнюю часть кода проверки и так получилось.

Вот.
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
struct WvsB{
int PLAYER[N];
int PLAYER1[N];
};
    
---
 
while(ch!='\r'){
 
        cout<<"\nКОМАНДА BLACKWOOD\n\n";
 
        for (int i=0,b=1; i<N; ++i,b++)
        {
            while(true){
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<b<<" ";
 
            cin>>black.PLAYER[i]; // <<------------- ввод black.PLAYER
 
            if(cin.fail() || black.PLAYER[i]>70 || black.PLAYER[i]<1)
            {cout<<"\n...еще раз...\n\n"; cin.clear(); cin.ignore(4,'\n'); continue;}
            
            else
            {cin.ignore(10,'\n'); break;}
 
            }       
        }
 
        cout<<"\nКОМАНДА WARFACE\n\n";
 
 for (int j=0,g=1; j<N; j++, g++)
 {
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<g<<" ";
            cin>>warfc.PLAYER1[j]; // <<------------- ввод warfc.PLAYER1
 
 
          if (cin.fail() || warfc.PLAYER1[j]>70 || warfc.PLAYER1[j]<1)
         {
              cout<<"ERROR.. значение = "<< black.PLAYER1[j]; getch();  
              return 0;
          }
 
}
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 13:47 #5
Вопрос остался:
Цитата Сообщение от alsav22 Посмотреть сообщение
А где, вообще, ввод black.PLAYER1?

Цитата Сообщение от snyppimylt Посмотреть сообщение
cin>>black.PLAYER[i]; // <<------------- ввод black.PLAYER
Вы мне показываете ввод black.PLAYER, а я спрашиваю про ввод black.PLAYER1.
0
Lawlliet
2 / 2 / 0
Регистрация: 25.03.2010
Сообщений: 145
19.02.2013, 13:51 #6
Цитата Сообщение от snyppimylt Посмотреть сообщение
cin>>warfc.PLAYER1[j]; // <<------------- ввод warfc.PLAYER1
[/CPP]
по моему видно
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 13:55 #7
Цитата Сообщение от Lawlliet Посмотреть сообщение
по моему видно
Видно black.PLAYER1 или warfc.PLAYER1?
0
Lawlliet
2 / 2 / 0
Регистрация: 25.03.2010
Сообщений: 145
19.02.2013, 13:56 #8
извиняюсь, ошибся
0
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
19.02.2013, 22:09  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы мне показываете ввод black.PLAYER, а я спрашиваю про ввод black.PLAYER1.
Его нету потому что если бы я и там массив делал в PLAYER, то были бы проблемы с элементами массива. когда записываешь число от 1 до 10 то при следующем вводе первые 2 числа занимают предыдущий ввод первые 2х чисел.

Ну так в чем проблема в коде?

Добавлено через 6 минут
Извините, еще раз:

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
struct WvsB{
int PLAYER[N];
int PLAYER1[N];
};
    
---
 
while(ch!='\r'){
 
        cout<<"\nКОМАНДА BLACKWOOD\n\n";
 
        for (int i=0,b=1; i<N; ++i,b++)
        {
            while(true){
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<b<<" ";
 
            cin>>black.PLAYER[i]; // <<------------- ввод black.PLAYER
 
            if(cin.fail() || black.PLAYER[i]>70 || black.PLAYER[i]<1)
            {cout<<"\n...еще раз...\n\n"; cin.clear(); cin.ignore(4,'\n'); continue;}
            
            else
            {cin.ignore(10,'\n'); break;}
 
            }       
        }
 
        cout<<"\nКОМАНДА WARFACE\n\n";
 
 for (int j=0,g=1; j<N; j++, g++)
 {
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<g<<" ";
            cin>>warfc.PLAYER1[j]; // <<------------- ввод warfc.PLAYER1
 
 
          if (cin.fail() || warfc.PLAYER1[j]>70 || warfc.PLAYER1[j]<1)
         {
              cout<<"ERROR.. значение = "<< warfc.PLAYER1[j]; getch();  
              return 0;
          }
 
}
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 22:53 #10
Цитата Сообщение от snyppimylt Посмотреть сообщение
Его нету
Если его нет, зачем он у вас в коде в 4 посте? Код из 9 поста даёт ошибку?

Добавлено через 9 минут
Не вижу всего кода, но вот такой код ошибок не выдаёт:
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
#include <iostream>
#include <conio.h>
using namespace std;
 
const int N = 7;
 
struct WvsB
{
int PLAYER[N];
int PLAYER1[N];
};
    
 
int main()
{
 setlocale(0, "");
 
 WvsB black;
 WvsB warfc;
 
 char ch = 'y';
 while(ch!='\r')
 {
 
    cout<<"\nКОМАНДА BLACKWOOD\n\n";
 
    for (int i=0,b=1; i<N; ++i,b++)
    {
        while(true)
        {
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<b<<" ";
 
            cin>>black.PLAYER[i]; // <<------------- ввод black.PLAYER
 
            if(cin.fail() || black.PLAYER[i]>70 || black.PLAYER[i]<1)
            {cout<<"\n...еще раз...\n\n"; cin.clear(); cin.ignore(4,'\n'); continue;}
            
            else
            {cin.ignore(10,'\n'); break;}
 
        }       
    }
 
    cout<<"\nКОМАНДА WARFACE\n\n";
 
     for (int j=0,g=1; j<N; j++, g++)
     {
                cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<g<<" ";
                cin>>warfc.PLAYER1[j]; // <<------------- ввод warfc.PLAYER1
 
 
              if (cin.fail() || warfc.PLAYER1[j]>70 || warfc.PLAYER1[j]<1)
             {
                  cout<<"ERROR.. значение = "<< warfc.PLAYER1[j]; getch();  
                  return 0;
             }
 
     }
}
 
system("pause");
return 0;
}
0
Миниатюры
Проверка ввода чисел  
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
19.02.2013, 23:37  [ТС] #11
Проверил я еще раз свой исходный код и написал так как было в оригинале, т.е. в комманде Варфейс и Блеквуд так же:

C++
1
2
3
4
5
if(cin.fail() || black.PLAYER[i]>70 || black.PLAYER[i]<1)
            {cout<<"\n...еще раз...\n\n"; cin.clear(); cin.ignore(4,'\n'); continue;}
            
            else
            {cin.ignore(10,'\n'); break;}
Вот оригинал, работает стабильно, видимо все дело в невнимательности

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
int main()
{
    setlocale(0,"RUS");
 
char ch;
WvsB black;
WvsB warfc;
 
cout<<"ДЕМОНСТРАЦИЯ РЕЖИМА АВТОБАЛАНСА ИГРЫ WARFACE\n\nВВЕДИТЕ НОМЕР РАНГА У КАЖДОГО ИГРОКА. АВТОБАЛАНС РАСЧИТАН НА ИГРУ 8х8\n\n";
cout<<" ------------------ ДИАПАЗОН РАНГОВ ОТ 1 ДО 70 ----------------------\n";
    while(ch!='\r'){
 
        cout<<"\nКОМАНДА BLACKWOOD\n\n";
 
        for(int i=0,b=1; i<N; ++i,b++)
        {
            while(true){
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<b<<" ";
 
            cin>>black.PLAYER[i];
            if(cin.fail() || black.PLAYER[i]>70 || black.PLAYER[i]<1)
            {cout<<"\n...еще раз...\n\n"; cin.clear(); cin.ignore(4,'\n'); continue;}
            
            else
            {cin.ignore(10,'\n'); break;}
 
            }       
        }
 
 
        cout<<"\nКОМАНДА WARFACE\n\n";
 
        for(int j=0,g=1; j<N; j++,g++)
        {
            while(true){
            cout<<"НОМЕР РАНГА -"<<" ИГРОК "<<g<<" ";
 
            cin>>warfc.PLAYER1[j];
            if(cin.fail() || warfc.PLAYER1[j]>70 || warfc.PLAYER1[j]<1)
            {
                cout<<"\n...еще раз...\n\n"; 
                cin.clear(); 
                cin.ignore(4,'\n'); 
                continue;
            }
            
            else
            {
                cin.ignore(10,'\n'); 
                break;
            }
 
        }       
    }
 
    cout<<"\n\n...Enter для выхода...\n";
    ch=getch();
}
 
return 0;
}
Добавлено через 2 минуты
Просто мне казалось странным, почему 2 одинаковой проверки работали не стабильно как в скриншоте который я в теме предоставил.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 23:37
Привет! Вот еще темы с ответами:

gets() проверка ввода - C++
возникло слабое звено в программке ... max_length = 100; line = new char; ... gets(line); ... вопрос такой: как...

Проверка ввода - C++
Всем привет. Прошу обясните мне как зделать проверку вводимых даных. Мне нужно к примеру задать числовой масив типа (int). Как зделать так...

C++ проверка ввода - C++
Ребят помогить пожалуста разобраться не работает чертова проверка ввода я в коментарии вынес текст ошибки гляньте ... // laba1.cpp:...

Проверка ввода - C++
Доброго вам времени суток. Бывалые, подскажите неопытному, как лучше писать? И если несложно, то скажите почему. for(;;) { ...


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

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

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