Сравнение между вводом строки и последовательного порта всегда ложно - PullRequest
0 голосов
/ 06 января 2020

Я делаю игру, в которой я получаю входные данные от последовательного порта (Arduino). Поскольку ввод - это не просто число, а «е» + число, которое я пытаюсь получить в Visual Studio.

Это, однако, не так просто, как «вы». буду ожидать. Я использую простые операторы if, см. Мой код:

string RolledNumberCode = Program.form1.DicePort.ReadExisting();
 if (RolledNumberCode.Contains("e"))
                {
                    MessageBox.Show(RolledNumberCode);
                    int RolledNumber = 0;
                    if (RolledNumberCode.Contains("1")) { RolledNumber = 1; }
                    else if (RolledNumberCode.Contains("2")) { RolledNumber = 2; }
                    else if (RolledNumberCode.Contains("3")) { RolledNumber = 3; }
                    else if (RolledNumberCode.Contains("4")) { RolledNumber = 4; }
                    else if (RolledNumberCode.Contains("5")) { RolledNumber = 5; }
                    else if (RolledNumberCode.Contains("6")) { RolledNumber = 6; }

                    dice.RollAnalog(RolledNumber);

После того, как это не сработало, я протестировал его с ящиками сообщений, и c# правильно прочитал RolledNumberCode, например, всплывающее окно сообщений показывая е4. Но затем я помещаю RolledNumber в MessageBox, он всегда равен 0.

Кто-нибудь знает, что я здесь не так делаю? Я твердо думаю, что в моем коде есть простая ошибка, но я не могу ее найти: (

1 Ответ

1 голос
/ 06 января 2020

Вместо if else ladder я бы предложил удалить e из строки, т.е. "e1" в "1" и присвоить его RolledNumber

string RolledNumberCode = Program.form1.DicePort.ReadExisting();
if (RolledNumberCode.Contains("e"))
{
    int RolledNumber = Convert.ToInt32(RolledNumberCode.Replace("e",""));
    dice.RollAnalog(RolledNumber);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...