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

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

Войти
Регистрация
Восстановить пароль
 
Александр_Алекс
6 / 3 / 1
Регистрация: 08.12.2013
Сообщений: 151
#1

Несколько логически ИЛИ в условии if - C++

13.08.2014, 23:14. Просмотров 827. Ответов 4
Метки нет (Все метки)

Здравствуйте! Вот такой, вроде бы несложный вопрос:
Есть функция, в которую передается массив символов, далее она проверяет устраивает ли первый символ заданному критерию, если нет то возвращает нолик, если да единичку.
Критерий таков: первый символ должен быть одним из этих -- A, B, C, E, H, K, M, O, P, T, X, Y.
Передаю такой массив: A000AA
Буква которые записаны в условии и массиве все в английской раскладке.
Мне кажется, что ошибка в самой записи условия, оно там длинное, я мог напутать.
Вот само условие
C++
1
2
3
if ((buff[0] != 'A') || (buff[0] !='B') || (buff[0] !='C') || (buff[0] !='E') || (buff[0] !='H') || (buff[0] !='M')
            || (buff[0] !='O') || (buff[0] !='P') || (buff[0] !='T') || (buff[0] !='X') || (buff[0] !='Y'))
        return 0;
Если нужно будет, скину весь код. Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2014, 23:14     Несколько логически ИЛИ в условии if
Посмотрите здесь:

Строки в условии C++
Апострофы в условии C++
C++ Объектный модуль. Он всегда один или их может быть несколько после компиляции? От чего это зависит?
C++ Сравнить логически два массива
C++ Как программно сжать директорию или несколько файлов?
C++ Как в условии поставить проверку принадлежности к тому или иному типу?
Логически правильное наследование исключений C++
Сохранить одну или несколько картинок в PDF C++
C++ Логическое ИЛИ в условии цикла while
Ошибка в условии if C++
C++ Рекурсивная функция, логически проверяющая, что массив упорядочен по возрастанию
Создать несколько классов или элементов класса в цикле C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
2377 / 1071 / 234
Регистрация: 30.11.2013
Сообщений: 3,555
13.08.2014, 23:24     Несколько логически ИЛИ в условии if #2
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
#include <cstring>
#include <iostream>
 
using namespace std;
bool check(char* ch)
{
    switch(*ch)
    {
        case 'A':
        case 'B':
        case 'C':
        case 'E':
        case 'H':
        case 'K':
        case 'M':
        case 'O':
        case 'P':
        case 'T':
        case 'X':
        case 'Y': 
            return 1;
        default: 
            return 0;
    }
}
void main()
{
    char* text = new char[255];
    strcpy(text, "Privet kak dela?");
    cout << check(text);
 
}
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,484
13.08.2014, 23:38     Несколько логически ИЛИ в условии if #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Критерий таков: первый символ должен быть одним из этих -- A, B, C, E, H, K, M, O, P, T, X, Y.
а теперь смотри что будет если передать символ A
первое условие (buff[0] != 'A') ложь
второе (buff[0] !='B') истина
дальше не проверяется
все выражение истина
входим в if и возвращаем 0
тебе нужно использовать в этом случае И

C++
1
2
3
if ((buff[0] != 'A') && (buff[0] !='B') && (buff[0] !='C') && (buff[0] !='E') && (buff[0] !='H') && (buff[0] !='M')
            && (buff[0] !='O') && (buff[0] !='P') && (buff[0] !='T') && (buff[0] !='X') && (buff[0] !='Y'))
        return 0;
если хочешь использовать ИЛИ то измени проверку и возврашаемое значение
C++
1
2
3
if ((buff[0] == 'A') || (buff[0] =='B') || (buff[0] =='C') || (buff[0] =='E') || (buff[0] =='H') || (buff[0] =='M')
            || (buff[0] =='O') || (buff[0] =='P') || (buff[0] =='T') || (buff[0] =='X') || (buff[0] =='Y'))
        return 1;

но я бы лучше использовал свитч
не так страшно громадное условие да и править в случае чего удобно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  switch((buff[0])
    {
        case 'A':
        case 'B':
        case 'C':
        case 'E':
        case 'H':
        case 'K':
        case 'M':
        case 'O':
        case 'P':
        case 'T':
        case 'X':
        case 'Y': 
            return 1;
        default: 
            return 0;
    }
Добавлено через 35 секунд
пока писал rikimaru2013, уже ответил

Добавлено через 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
// объявляем глобальный массив по количеству всех возможных комбинаций
// поскольку он глобальный обнуляется автоматически
int Val_return [256];
 
// потом где то в начале программы прописываем в нужные значения 1
  Val_return['A']=1;
  Val_return['B']=1;
  Val_return['C']=1;
  Val_return['E']=1;
  Val_return['H']=1;
  Val_return['K']=1;
  Val_return['M']=1;
  Val_return['O']=1;
  Val_return['P']=1;
  Val_return['T']=1;
  Val_return['X']=1;
  Val_return['Y']=1;
 
 
// и вот так будет выглядеть функция проверки
int fncVeryfy(char a)
{
return Val_return[a];
Александр_Алекс
6 / 3 / 1
Регистрация: 08.12.2013
Сообщений: 151
14.08.2014, 00:05  [ТС]     Несколько логически ИЛИ в условии if #4
ValeryS, огромное спасибо за пояснение! Черт, прям глаза открыли, помню уже когда-то сталкивался с такой же проблемой, тоже не мог понять в чем дело.
some_name
Вежливость-главное оружие
221 / 221 / 55
Регистрация: 19.02.2013
Сообщений: 1,431
14.08.2014, 00:07     Несколько логически ИЛИ в условии if #5
А если так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
 
int main ()
{
    char mask[] = "ABCEHKMOPTXY";
    char* test = "Me need more many!";
    if(strchr(mask, test[0])){
        std::cout << "Good!";
    }
    system("pause");
    return 0;
}
Yandex
Объявления
14.08.2014, 00:07     Несколько логически ИЛИ в условии if
Ответ Создать тему
Опции темы

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