Используйте оператор if, чтобы определить, введен ли пользователем указанный c символ или номер - PullRequest
1 голос
/ 12 марта 2020

В моей функции getInput я сканирую ввод от пользователя.

Если пользователь вводит 'q' или 'Q', я хочу напечатать, что пользователь хочет выйти (программа не должна фактически «выход» в техническом плане).

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

Итак, мой вопрос:

Как я могу протестировать определенное преобразование значения символа в int-char, аналогично тому, как я пытался это сделать ниже?

Моя программа завершается, если пользователь вводит символ, и запускается, если пользователь вводит целое число, но неправильно определяет, что нажата 'q' или 'Q'.

У меня есть такой код:

int getInput() {

  int numSets;
  char quitTest1 = 'q';
  char quitTest2 = 'Q';

  //get number of sets from user
  printf("\nEnter desired amount of random number sets (or 'q'/'Q' to quit): ");
  scanf("%d", &numSets);

  if (numSets == (int)quitTest1 || numSets == (int)quitTest2) {
    printf("Exited");
  }

  else {
    return numSets;
  }

}

Возможно, мне не хватает некоторых основной принцип, но я не могу найти много помощи в Google.

Все ответы приветствуются.

1 Ответ

1 голос
/ 12 марта 2020

Обратите внимание, что

scanf("%d", &numSets);

не будет присваивать никакое значение numSets, если input является символом, numSets сохранит свое предыдущее значение, которое в этом случае неизвестно, так как переменная не инициализирована, использование его вперед приведет к неопределенному поведению.

Получение ввода в виде char array преобразования в char или int представляется наилучшим вариантом.

Live образец здесь

int getInput() {

    char numSets[100];
    int number = -1;
    char q;
    char quitTest1 = 'q';
    char quitTest2 = 'Q';

    //get number of sets from user
    printf("\nEnter desired amount of random number sets (or 'q'/'Q' to quit): ");
    fgets(numSets, sizeof(numSets), stdin);
    if (sscanf(numSets, "%d", &number)){
        printf("%d", number); //testing
        return number;
    } 

    if (sscanf(numSets, "%c", &q) && (q == quitTest1 || q == quitTest2))
        printf("Exited");
    else{
        puts("Invalid input");

    return number; //will return -1;
}
...