Поскольку простой конечный автомат просто использует оператор переключения и перечислимый тип для Вашего состояния. Сделайте свои переходы в операторе переключения на основе Вашего входа. В реальной программе Вы, очевидно, изменились бы, "если (введено)" для проверки на точки перехода. Надежда это помогает.
typedef enum
{
STATE_1 = 0,
STATE_2,
STATE_3
} my_state_t;
my_state_t state = STATE_1;
void foo(char input)
{
...
switch(state)
{
case STATE_1:
if(input)
state = STATE_2;
break;
case STATE_2:
if(input)
state = STATE_3;
else
state = STATE_1;
break;
case STATE_3:
...
break;
}
...
}
0 и (ненулевое значение) не равны «false» и «true», они Это просто представление, выбранное C. В других языках используется 0 для истины и -1 для false или другие схемы полностью. Логическое значение не 0 или 1, оно истинно или ложно.
Если оно также обрабатывает «да» и «нет», «выключено» и «включено», а также все мириады других вещей, аналогичных логическим? Где бы вы провели черту?
Логическое значение не 0 или 1, оно истинно или ложно.Если оно также обрабатывает «да» и «нет», «выключено» и «включено», а также все мириады других вещей, аналогичных логическим? Где бы вы провели черту?
Логическое значение не 0 или 1, оно истинно или ложно.Если оно также обрабатывает «да» и «нет», «выключено» и «включено», а также все мириады других вещей, аналогичных логическим? Где бы вы провели черту?
Что делает логические значения особенными? По сути, они равны 0 как ложь и ненулевые как истинные, по моему опыту ...
Это деталь реализации, которая совершенно не имеет отношения к делу.
true
- логическое значение. false
- логическое значение. Все остальное - нет.
Если вы хотите разобрать что-то такое, что строка «0» оценивает false
, а все остальное оценивает true
, вы можете использовать:
!mystr.Equals("0");
Вы хотите Convert.ToBoolean (int value)
не знаете, что не так с методами анализа: -)
Код бесполезный:
int falseInt = 0;
int trueInt = 1;
bool falseBool;
bool trueBool;
if (bool.TryParse(falseInt.ToString(), out falseBool))
{
if (!falseBool)
{
MessageBox.Show("TryParse: False");
}
}
if (bool.TryParse(trueInt.ToString(), out trueBool))
{
if (!trueBool)
{
MessageBox.Show("TryParse: True");
}
}
falseBool = Convert.ToBoolean(falseInt);
trueBool = Convert.ToBoolean(trueInt);
if (!falseBool)
{
MessageBox.Show("Convert: False");
}
if (trueBool)
{
MessageBox.Show("Convert: True");
}
К сожалению, в .NET такое часто случается. Например, я не могу вспомнить, что это за XML-сериализатор или XmlConvert, но один из них не работает, если регистр True / False неверен.
Чтобы получить то, что хотите, вы можете пройти через целое число и обратно.
string s = "2";
int i = Convert.ToInt32(s);
bool b = Convert.ToBoolean(i);
В приведенном выше случае все, что не равно нулю, будет оцениваться как истина.
По этой причине я создал класс, который я использую повсюду, под названием ConversionStrategy, который принимает во внимание тип источника и тип назначения и выбирает наиболее идеальную (и гибкую) стратегию преобразования для преобразования.