Проверка правильности ввода пользователем правильного символа - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь выяснить, как убедиться, что пользователь вводит правильный символ.По сути, я хочу, чтобы пользователь вводил c или u.Я дошел до того, что он работает, пока пользователь не введет фразу, начинающуюся с u или c, он все равно проходит.Я хочу, чтобы они нажимали только c или u без каких-либо других символов, прикрепленных к букве.Я подумал, что это связано с массивами, но я не слишком разбираюсь в массивах.здесь:

#include <stdio.h>

int main()
{
    char turn;

    printf("Welcome to the game of Sticks. The objective is to pick up the last stick\n\n");
    printf("Please choose who goes first. (u for user and c for computer): ");
    scanf(" %c", &turn);

    while (turn != 'c' && turn != 'u')          //Checking if user inputted c or u
    {
        printf("\nPlease enter u to go first or c for computer to go first!\n");
        scanf(" %c", &turn);
    }

    return 0;
}

1 Ответ

0 голосов
/ 04 октября 2018

Никогда не используйте оператор сравнения == для сравнения строк ...

Вместо этого используйте функцию strncmp, определенную в "string.h"

Например,

#include <stdio.h>
#include <string.h>

int main(void){

  char turn[] = "";

  scanf("%c",&turn);      

  while(strncmp(turn,'c',sizeof('c')) != 0) && (strncmp(turn,'u',sizeof('u')) != 0){
    //If User didn't enter c or u
    scanf("%c",&turn);

  }

 return 0;

}

О, а также, всегда проверяйте, что вы инициализируете переменные, которые вы определяете в функции, например, инициализируйте переменную turn, выполняя что-то вроде: char turn = "";.

Это сделано для предотвращения присвоения переменной turn случайного значения в адресе памяти.

...