Пытаюсь угадать мой буквенный код.Как включить случай, когда входной символ от пользователя равен моему письму? - PullRequest
0 голосов
/ 16 апреля 2019

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

Я попытался вложить оператор if и цикл while, чтобы достичь случая, когда буквы равны.

#include <stdio.h>

int main()
{

    char myLetter = 'a';

    printf("insert a char:");

    char userLetter;

    scanf("%1s", &userLetter);

    while (userLetter !=  myLetter)
    {
        printf("%c does not match mine, try again:", userLetter);

        scanf("%1s", &userLetter);
    }

    while (userLetter == myLetter)
    {
        printf("char matches! program will terminate now. ");

        break;
    }
}

ожидается:

insert a char:h
h does not match mine, try again:j
j does not match mine, try again:g
g does not match mine, try again:f
f does not match mine, try again:a
char matches! program will terminate now.

актуально:

insert a char:h
h does not match mine, try again:j
j does not match mine, try again:g
g does not match mine, try again:f
f does not match mine, try again:a
a does not match mine, try again:a does not match mine, try again:^C

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Правильный оператор форматирования для чтения одного символа - %c, а не %1s.Последний читает один символ, но записывает его в строку с нулевым символом в конце, поэтому он записывает нулевой байт вне переменной userLetter, что вызывает неопределенное поведение.

Вы должны поставить пробел перед операторомscanf пропустить пробел перед чтением символа.Это необходимо, чтобы он игнорировал символ новой строки после каждого ответа.

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

Цикл while в конце не нужен, поскольку вы не выходите из первого цикла, пока символы не совпадут.

Это рабочая версия:

#include <stdio.h>

int main()
{

    char myLetter = 'a';

    setbuf(stdout, NULL);
    printf("insert a char:");

    char userLetter;
    scanf(" %c", &userLetter);

    while (userLetter !=  myLetter)
    {
        printf("%c does not match mine, try again:", userLetter);
        scanf(" %c", &userLetter);
    }

    printf("char matches! program will terminate now.\n");
}
0 голосов
/ 17 апреля 2019

Если вы сравниваете 2 символа, почему вы не получаете письмо пользователя с scanf("%c", userLetter), а затем вы можете сравнить их с оператором = или !=. Если вы получаете ввод, ожидающий строковое значение, то я предлагаю вам объявить userLetter следующим образом:

char* userLetter[1];

и затем используйте scanf так же, как в коде, НО вам нужно сравнить строки с функцией strcmp.

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