IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Инкремент в условии, Си
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 56
Пол: Мужской

Репутация: -  2  +


Есть функция проверяющяя является ли её первый аргумент закрывающим тегом для второго аргумента. В первом сравнении я хочу проверить аргументы, а заодно передвинуться на один символ вперёд, но second почему-то не увеличивается. Что я не так делаю?

int isclose (char *first, char *second)
{
if (*(first++) != '<' && *(second++) != '<') // Проверяю являются ли аргументы тегами вообще
return 0;

if (*(first++) != '/')
return 0;

while (*(first++) && *(second++))
if (*first != *second)
return 0;

return 1;
}


Компилятор: gcc
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Вычисление логических выражений по короткой схеме

Как только значение выражения становится известным (а значение FALSE && что_угодно уже известно, это FALSE в любом случае), вычисление выражения прекращается. То есть, до второго сравнения дело даже не доходит...

Кстати, конкретно в твоем случае && - это ошибка. Для того, чтоб уйти из функции, достаточно, чтоб ОДИН из ее аргументов не начинался с '<', то есть, поставь ||, и в этом случае (в первом условии) у тебя будет все нормально. Дальше, в цикле while все-таки придется переделать...
Например, так:
	while (*first && *second)
if (*first++ != *second++) return 0;



Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 56
Пол: Мужской

Репутация: -  2  +


Да, спасибо, опять глупая ошибка, прям как с тем калькулятором...

Кстати, уменя проблема с программой, где используюется список (ошибка сегментирования), а в gdb тяжело работать с адресами, есть ли какие нибудь альтернативы или плагины к нему облегчающие это.

Сообщение отредактировано: Игорь -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
в gdb тяжело работать с адресами
Не замечал особых проблем... Если хочешь - присоедини программу (можно в приват), я помогу найти, где происходит ошибка.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 56
Пол: Мужской

Репутация: -  2  +


Не, спасибо, я сам. В крайнем случае возьму лист и карандаш.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 4:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name