Бьет ли карта 1 карту 2 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с программой. Что-то не так, не могу понять, что именно.
 struct card
{
/* масть карт */
enum {spades, clubs, diamonds, hearts} suit;
/* достоинство карт */
enum {six, seven, eight, nine, ten, jack, queen, king, ace} value;
} c1, c2;

Описать логическую функцию Kick(с1, с2, сs), проверяющую, бьёт ли карта с1 карту с2, с учётом того, что масть cs является козырной.

#include "stdafx.h"
#include <stdio.h>
#include <locale.h>
#include <stdlib.h> 
#include <conio.h>
struct card
{
    /*масть карт */
    enum { пики, трефы, бубны, червы } mast;
    /* достоинство карт */
    enum { шесть, семь, восемь, девять, десять, валет, дама, король, туз } dost;
} c1, c2;
 
int Kick(card c1, card c2, char cs);
/*--------------------------------------------------------------------*/
/*Основная часть программы*/
int main(void)
{
    char cs=0;
    int k;
    setlocale(LC_ALL, "Russian");
    printf("Введите масть 1 карты - ");
    scanf("%lf\n", &c1.mast);   

    printf("Введите достоинство 1 карты - ");
    scanf("%lf\n", &c1.dost);
    printf("Введите масть 2 карты - ");
    scanf("%lf\n", &c2.mast);
    printf("Введите достоинство 2 карты - ");
    scanf("%lf\n", &c2.dost);
    printf("Введите масть козырной карты - ");
    scanf("%lf\n", &cs);
    Kick(c1,c2,cs);
    return 0;
}
 
int Kick(card c1, card c2,  char cs)
{
    char k;
 
k = ((c1.mast == cs) && (c2.mast != cs)) || ((c1.mast == c2.mast) && (c1.dost < c2.dost));
    if (c1.mast == c2.mast)         //если масти одинаковые
            if (c1.dost > c2.dost) return 1;
        else
        {
            return 0;
        }
    else                //если масти не одинаковые
    {
        if (c1.mast == cs)     //если козырь
            return 1;
        else
            return 0;
    }
}

Решение задачи: «Бьет ли карта 1 карту 2»

textual
Листинг программы
#include <stdio.h>
#include <stdbool.h>
 
struct card
{
    enum {spades, clubs, diamonds, hearts} suit;
    enum {six, seven, eight, nine, ten, jack, queen, king, ace} value;
} c1, c2;
 
int enter_card_suite()
{
    int suit;
    bool wrongSuit;
 
    do
    {
        char suitSymbol;
        printf("Please enter suit symbol for a trump (s, c, d or h): ");
        scanf("%c", &suitSymbol);
        getchar();
        wrongSuit = false;
 
        switch (suitSymbol)
        {
            case 's':  suit = spades; break;
            case 'c':  suit = clubs; break;
            case 'd':  suit = diamonds; break;
            case 'h':  suit = hearts; break;
            default:
                printf("Wrong suit symbol '%c'.\n", suitSymbol);
                wrongSuit = true;
        }
    }
    while (wrongSuit);
 
    return suit;
}
 
int main()
{
    c1.suit = clubs; c1.value = nine;
    c2.suit = hearts; c2.value = queen;
 
    int cs = enter_card_suite();
 
    printf("Trump suit (as integer): %d\n", cs);
 
    if (c1.suit == cs) puts("First card is a trump.");
    if (c2.suit == cs) puts("Second card is a trump.");
}

Объяснение кода листинга программы

  1. Структура card объявляет две переменные типа enum для хранения масти и значения карты.
  2. Функция enter_card_suite запрашивает у пользователя ввод масти и проверяет его с помощью оператора switch.
  3. Если введенный символ масти соответствует одному из значений в switch, соответствующее значение enum присваивается переменной suit.
  4. Если введенный символ масти не соответствует ни одному из значений в switch, выводится сообщение об ошибке и продолжается цикл do-while.
  5. Ввод масти повторяется до тех пор, пока не будет введено правильное значение.
  6. После ввода правильного значения масти функция возвращает его в качестве возвращаемого значения.
  7. В функции main объявляются две переменные типа card для хранения карт.
  8. Первая карта устанавливается на масть clubs и значение nine.
  9. Вторая карта устанавливается на масть hearts и значение queen.
  10. Функция enter_card_suite вызывается для ввода масти.
  11. Выводится введенная масть.
  12. С помощью условных операторов проверяется, является ли первая или вторая карта мастью, введенной с помощью функции enter_card_suite.
  13. Если первая или вторая карта является мастью, выводится соответствующее сообщение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы