Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
1

Оператор if. Сравнение strlen(char x) != 3

18.02.2013, 15:27. Показов 1583. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Что то не понял, почему не сравнивает...
Вот код который поидее должен работать:
C++
1
if((strlen(ne) != 1) || (strlen(ne) != 3))
Т.е. я сравниваю size_T с числом. Юзал поиск, сказали что "нельзя сравнивать unsigned и signed". Насколько я понимаю, это "беззнаковое и знаковое", но как же тогда быть ? Пробовал всяка разна, но не получается.
Может кто помочь ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2013, 15:27
Ответы с готовыми решениями:

Strlen и бинарные данные в char - как выполнить их отправку
Размер бинарных данных готовых к отправки всегда разный. В середине может содержатся любое кол-во...

Посимвольное сравнение: оператор "==" не может применяться к операндам типа string и char
Нужно найти есть ли в строке данный символ, написал, но вот студия выдает ошибку, что оператор "=="...

Сравнение текста из файла и сравнение с текстом в программе char - Dev C++
Доброго времени суток! Имеется код программы: ifstream test("primer.txt"); char awm = "kod";...

Сравнение разных типов *Char и Char
Друзья, выполняю задание по имитации консольной команды Windows. Встретился с проблемой разделения...

15
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.02.2013, 15:29 2
что такое у тебя ne?
C++
1
(strlen(ne) != 1)
заменить на что то вроде
C++
1
(strlen(ne) != size_t(1)
0
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
18.02.2013, 15:37  [ТС] 3
C++
1
if((strlen(ne) != size_t(1)) || (strlen(ne) != size_t(3)))
не работает, условие всё равно не выполняется.

C++
1
char ne[5]=""
...
далее
C++
1
GetDlgItemText(hDlg, IDC_EDIT9, ne, 5);
получаю символьный массив... и нужно сравнить его.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.02.2013, 15:42 4
разберись как можно заполнять массивы) если ничего не путаю написав
C++
1
char ne[5]=""
его изменить будет не так то просто, попробуй написать
C++
1
strcpy(ne,"")
да и strlen для такого массива не покажет 5

Добавлено через 2 минуты
ну да для
C++
1
char ne[5]=""
strlen пишет 0
0
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
18.02.2013, 15:50  [ТС] 5
Цитата Сообщение от aLarman Посмотреть сообщение
разберись как можно заполнять массивы) если ничего не путаю написав
C++
1
char ne[5]=""
его изменить будет не так то просто, попробуй написать
C++
1
strcpy(ne,"")
да и strlen для такого массива не покажет 5

Добавлено через 2 минуты
ну да для
C++
1
char ne[5]=""
strlen пишет 0
1. В начале я его просто обнуляю этим
C++
1
=""
Он отлично заполняется потом вводимой информацией в EditBox. (Winapi)

2. Мне не нужно 5, 5 - это просто максимальная длина массива.

3. В том то и дело что для
C++
1
char ne[5]=""
я решил проверить какой результат он даёт. Смотри сам:
C++
1
2
3
4
5
6
7
int vne = strlen(ne);
itoa(vne,cne,10);
if((strlen(ne) != 1) || (strlen(ne) != 3))
{
    MessageBox(hDlg, cne, "Ошибка!", MB_OK);
    return 0;
}
где в начале я указал:
C++
1
char cne[10]="";
В итоге он мне в любом случае выводит окно с "ошибкой", в котором он пишет правильное! число.
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
18.02.2013, 15:59 6
Старина, правильно ли я понял, что ты хочешь, чтобы у тебя окно с ошибкой вылезало, если:
длина не совпадает с 1
или
длина не совпадает с 3
?

Короче) Мне думается, ты напутал с условием и там нужно && вместо ||
1
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.02.2013, 16:01 7
ты меня начинаешь запутывать приведи весь код, так обрывками ничего не понятно
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
18.02.2013, 16:06 8
Izual, Попробуй найти число n, для которого НЕ ВЫПОЛНЯЛОСЬ бы условие (n!=1 || n!=3) ?
Найдешь - получишь большую филдсовскую премию
0
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
18.02.2013, 16:10  [ТС] 9
Цитата Сообщение от ITcrusader Посмотреть сообщение
Старина, правильно ли я понял, что ты хочешь, чтобы у тебя окно с ошибкой вылезало, если:
длина не совпадает с 1
или
длина не совпадает с 3
?

Короче) Мне думается, ты напутал с условием и там нужно && вместо ||
Ржу нимагу =) Реально... поменял на && и всё заработало.
Но что то я не понимаю логики.
Ведь "||" - это или. А "&&" - это и.
Верно мне нужно чтоб "если длина не совпадает с 1 или с 3 то... Но ведь "ИЛИ" =)

Алгоритм решён, кланяюсь в ноги. Теперь хочется "понять" почему не "||" а "&&" надо было =)
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
18.02.2013, 16:11 10
Цитата Сообщение от Байт Посмотреть сообщение
Izual, Попробуй найти число n, для которого НЕ ВЫПОЛНЯЛОСЬ бы условие (n!=1 || n!=3) ?
Найдешь - получишь большую филдсовскую премию

Цитата Сообщение от ITcrusader Посмотреть сообщение
Короче) Мне думается, ты напутал с условием и там нужно && вместо ||
Вот и я о том же)))) А выглядит оно, кстати, довольно безобидно)))))
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.02.2013, 16:11 11
алгебры логики не было?)
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
18.02.2013, 16:14 12
Ты хотел обозначить следующее: если число (в твоем случае - длина) не входит в множество {1, 3}, то вывести диалог.

это обозначает следующее: число не равно 1 и (одновременно с этим) не равно 3

Так - понятно?)))
0
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
18.02.2013, 16:15  [ТС] 13
Цитата Сообщение от aLarman Посмотреть сообщение
алгебры логики не было?)
Институт был паршивым =)
Пока делаю первый свой проэкт БД на С++ получил знаний больше (за 3 месяца) чем за 3 года обучения в инсте.

На самом деле я до сих пор не могу дойти почему "И" )))
Я отталкиваюсь от того что:
C++
1
if((strlen(ne10) == 1) && (strlen(ne10) == 3))
вот так оно точно не заработает, т.к. одна переменная не может иметь сразу значение "1" и значение "3" =)

видимо в условии != оно должно звучать иначе )
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
18.02.2013, 16:16 14
Цитата Сообщение от Izual Посмотреть сообщение
Теперь хочется "понять" почему не "||" а "&&" надо было
Смотри. n!=1 - это все числа не равные 1 = 2,3,4,5 ...
n!=3 это 1,2,4,5... Операция "||" дает объединение этих множеств. "&&" напротив - пересечение
(n!=1 || n!=3) === (!(n==3 && n==1))
Внутреняя скобка всегда дает false. !false = true.
2
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
18.02.2013, 16:21  [ТС] 15
Байт, верно, просто когда то, когда я изучал по (видимо галимой) книжке С++, там говорилось что "||" - логическое или, а "&&" - логическое И. И всегда когда программировал на это опирался и ёмаё за 4 года никогда не сталкивался с тем что это не так. Сейчас открыл другую книгу и увидел что, те логические операции были " сложением и умножением" =)
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.02.2013, 16:22 16
!(a && b ) = !a || !b
!(a || b ) = !a && !b
a && a = a
a || a = 1 (true)
так может пригодится
1
18.02.2013, 16:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2013, 16:22
Помогаю со студенческими работами здесь

Почему в коде записано strlen()+1 вместо strlen()
здравствуйте. объясните пожалуйста. почему для выделения места на основе размера уже существующей...

Ошибка в strcpy_s(S + pos, const char 512, S + pos + strlen(str);
#include "stdafx.h" #include<iostream> #include<string> using namespace std; int main() { ...

IntelliSense: отсутствует оператор "<<", соответствующий этим операндам типы операндов: std::basic_ostream<char, std::char_traits<char>
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct Stydent { std::string...

Оператор new и char
char * test = new char; Не работает данный код, да и вообще любая операция new на char не...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru