Сравнение введенной строки с напечатанной функцией

Ниже приведен код, который я написал для игры в кости под названием чо хан. Чтобы ввести ваше предположение, я использовал число для обозначения слов «нечетный» и «четный». С тех пор я попытался написать это снова, но на самом деле написать нечетное или даже в разделе scanf, но не могу заставить его работать. Любая помощь будет оценена :)

//cho-han

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
srand(time(NULL));

int x = (rand() % 6) + 1;
int y = (rand() % 6) + 1;
int result = 0;
int guess = 0;

printf("The values of two dice rolls will be added up. The aim is to guess whether that total number will be odd or even.\n");
printf("To guess odd, enter '1'. To guess even, enter '2'.\n\n");
printf("Please enter your guess for the combined total of the two dice rolls: ");

scanf_s("%d", &guess);
if (guess == 2)
{
    printf("\nyour guess is even.\n");
}
if (guess == 1)
{
    printf("\nyour guess is odd.\n");
}
if (guess > 2 || guess < 1)
{
    printf("\nInvalid guess.\nYou lose!\n");
    return (1);
}

printf("\ndice roll 1 = %d\n", x);
printf("dice roll 2 = %d\n", y);

result = x + y;
printf("\ncombined total of both rolls is %d", result);

if (result == 1 || result == 3 || result == 5 || result == 7 || result == 9 || result == 11)
{
    printf("\ncombined total of both rolls is odd.\n");
}
else
{
    printf("\ncombined total of both rolls is even.\n");

}

if (guess == 1 && result == 1 || guess == 1 && result == 3 || guess == 1 && result == 5 || guess == 1 && result == 7 || guess == 1 && result == 9 || guess == 1 && result == 11)
{
    printf("\nYou win!\n");
}
else if (guess == 2 && result == 2 || guess == 2 && result == 4 || guess == 2 && result == 6 || guess == 2 && result == 8 || guess == 2 && result == 10 || guess == 2 && result == 12)
{ 
    printf("\nYou win!\n");
}
else
{
    printf("\nYou lose!\n");
}
return 0;

}

просканируйте строку и используйте strcmp.

Osiris 31.10.2018 13:12

Чтобы сделать его MCVE, вы, вероятно, могли бы удалить все после части с scanf из вашего вопроса. Добавление кода, не имеющего отношения к вопросу, только отвлекает людей.

Gerhardh 31.10.2018 13:15

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

Gerhardh 31.10.2018 13:16
1
3
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
  1. Вам следует сменить scanf_s на scanf
  2. Линия if (result == 1 || result == 3 ... могла быть if (result % 2 == 1) {
  3. Вы можете использовать strcmp для решения своего вопроса

Следующий code может работать:

   //cho-han

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

int main(void)
{
    srand(time(NULL));

    int x = (rand() % 6) + 1;
    int y = (rand() % 6) + 1;
    int result = 0;
    int guess = 0;
    char buf[10];

    printf("The values of two dice rolls will be added up. The aim is to guess whether that total number will be odd or even.\n");
    printf("To guess odd, enter 'odd'. To guess even, enter 'even'.\n\n");
    printf("Please enter your guess for the combined total of the two dice rolls: ");

    fgets(buf, sizeof buf, stdin);
    if (strcmp(buf, "even\n") == 0) {
        guess = 2;
        printf("\nyour guess is even.\n");
    } else if (strcmp(buf, "odd\n") == 0) {
        guess = 1;
        printf("\nyour guess is odd.\n");
    } else {
        printf("\nInvalid guess.\nYou lose!\n");
        return 1;
    }

    printf("\ndice roll 1 = %d\n", x);
    printf("dice roll 2 = %d\n", y);
    printf("\ncombined total of both rolls is %d", x + y);

    result = (x + y) % 2;
    if (result == 1)
        printf("\ncombined total of both rolls is odd.\n");
    else
        printf("\ncombined total of both rolls is even.\n");

    if (guess == result)
        printf("\nYou win!\n");
    else
        printf("\nYou lose!\n");

    return 0;
}

Примечание: if (result % 2 == 1) { в порядке, когда result >= 0, как в этом случае, но result % 2 == 1 - неправильный тест на нечетность, когда result < 0. Я бы порекомендовал if (result % 2) { или аналогичный if (result % 2 != 0) {.

chux - Reinstate Monica 31.10.2018 13:56

Вам нужно изменить свое предположение на тип char и scanf для захвата строки.

char guess[256];
scanf("%s", guess);

И тогда лучший способ - вызвать toupper () и сравнить его с вашим текстом с помощью strcmp ().

Другие вопросы по теме