запретить пользователю переходить на другую строку с помощью «кнопки ввода» в C - PullRequest
0 голосов
/ 25 января 2020
  printf(" -----------------------------------\n");
  printf("|   *** E - Liquid Calculator ***   |\n");
  printf(" -----------------------------------\n");
  printf("| Zutaten                           |\n");
  printf(" -----------------------------------\n");
  printf("| Aroma:     %%   Nikotin:     mg/ml |\n");
  printf("| Nikotinshot:     mg/ml            |\n");
  printf("| In total:      ml                 |\n");
  printf(" -----------------------------------\n");
  printf("| Ergebnis                          |\n");
  printf(" -----------------------------------\n");
  printf("| Aroma:      ml   Nikotin:     ml  |\n");
  printf("| Base:       ml                    |\n");
  printf(" -----------------------------------\n");

Я создал небольшой проект, в котором я хочу, чтобы пользователь ввел 4 значения в таблицу, а затем вычислил ингредиенты. однако, если пользователь нажимает «ввод» до фактического ввода значения, курсор просто перейдет на новую строку, а затем уничтожит макет всей программы.

я попробовал следующий код, чтобы предотвратить любые неожиданные «новые строки / ввод»

do   
  {
    POSITION (6,10);
    scanf("%c", &spacebar);
    if (spacebar == '\n')
    {
      POSITION (18,0);
      printf("Eingabe erfordelich!\n");
    }
  } while (spacebar == '\n');
  clearBuffer();

проблема в том, что, как только я действительно ввожу значение, программа пропускает введенное значение и Мне нужно ввести его во второй раз, прежде чем он будет сохранен в переменной.

так выглядит в целом функция «предотвращать новую строку» и первая функция, которая читает пользовательский ввод для «аромат»

  do   //prevent the user from pressing enter before actually typing a number
  {
    POSITION (6,10);
    scanf("%c", &spacebar);
    if (spacebar == '\n')
    {
      POSITION (18,0);
      printf("Eingabe erfordelich!\n");
    }
  } while (spacebar == '\n');
  clearBuffer();
  POSITION (18,0);
  CLEAR_LINE;


  do
  {
    POSITION (6,10);
    Scan_Erg = scanf("%f", &Aroma);
    clearBuffer();
    if (Scan_Erg == 0)
    {
      POSITION (16,0);
      FORECOLOR_RED;
      printf("Please only enter numbers!");
      FORECOLOR_YELLOW;
      POSITION (6,14);
      CLEAR_LINE;
      POSITION (6,10);
      printf("    %%   Nikotin:     mg/ml |");
    }
    else
    {
      POSITION (6,10);
      CLEAR_LINE;
      POSITION (6,10);
      printf("%4.1f%%   Nikotin:     mg/ml |", Aroma);
    }
  } while (Scan_Erg == 0);

Кто-нибудь знает, как заблокировать ввод как новую строку, когда нет вводимого значения? любые предложения или помощь будут оценены. я новичок в программировании: -)

1 Ответ

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

Вы не можете сделать больше, чем самый простой ввод / вывод через scanf() и printf().

Вы можете создать свою собственную систему для чтения ввода пользователя.

Но, как вы Подозреваю, что эта проблема не нова, и некоторые умные люди предлагают широко используемое решение: библиотеку curses.

В зависимости от вашей разработки и / или целевой системы вы можете искать ncurses или pdcurses и его документация. Также будет несколько уроков.

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