Как мне ограничить диапазон ввода символов? - PullRequest
0 голосов
/ 10 июля 2019

Состояния проблемы,

Подпрограмма get_char позволяет вводить любой символ.Измените get_char, используя ассемблер, чтобы принимать символы ASCII, которые находятся в диапазоне только от 0 и z включительно.Вам также нужно будет принять «$» в качестве допустимого значения (завершающий символ).Если введен недопустимый символ, он должен продолжать запрашивать новый ввод, пока он не будет введен, дополнительно отображая сообщение об ошибке «Только буквенно-цифровые символы, повторите попытку>».

void get_char(char& a_character)
{
  a_character=(char) _getwche();
  if (a_character=='0' || a_character=='z')  // allow the enter key to work as the terminating character too
    a_character=dollarchar;
}

1 Ответ

0 голосов
/ 10 июля 2019

У меня нет кода в сборке, но в C показанная вами функция get_char() должна выглядеть примерно так:

void get_char(char& a_character)
{
  do
  {
    a_character = (char) _getwche();
    if (
      ((a_character >= '0') && (a_character <= '9')) ||
      ((a_character <= 'a') && (a_character <= 'z')) ||
      ((a_character <= 'A') && (a_character <= 'Z')) ||
      (a_character == dollarchar)
      )
    /* alternatively:
    if (isalnum(a_character) || (a_character == dollarchar))
    */
    {
      break;
    }

    printf("Alphanumeric characters only, please try again > ");
  }
  while (true);
}

В качестве альтернативы:

void get_char(char& a_character)
{
  a_character = (char) _getwche();
  while (
    !(
      ((a_character >= '0') && (a_character <= '9')) ||
      ((a_character <= 'a') && (a_character <= 'z')) ||
      ((a_character <= 'A') && (a_character <= 'Z')) ||
      (a_character == dollarchar)
      )
    )
  /* alternatively:
  while (!isalnum(a_character) && (a_character != dollarchar))
  */
  {
    printf("Alphanumeric characters only, please try again > ");
    a_character = (char) _getwche();
  }
}

Я оставляю вам упражнение по переводу кода C в сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...