Assigning from int to char[10] from char to char[10] - C (СИ)

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

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

добрый день, подскажите пожалуйста, в карточной колоде 52 карты, у меня есть массив структур где Value 1 2 3 ...13 suit c h d s
struct card{
        int value;
        char suit;
};
struct board{
        struct card deck[52];
};
нужно распечатать имена туз, король, ....10. ...2 и соответственно clubs diamonds hearts spades я создала новую структуру
struct card2{
        char value2[10];
        char suit2[10];
};
 
struct board2{
        struct card2 deck2[10];
};
и использовала Strcpy для присвоения но ответ не верный....
void print(struct board str){
        int i;
        struct board2 str2;

        for(i=0; i<10; i++){
                printf("Card Value: %d Suit: %c \n", str.deck[i].value , str.deck[i].suit);
        }

        for(i=0; i< 10; i++){
                if(str.deck[i].value = 13)
                        strcpy(str2.deck2[i].value2, "ace");
                else if(str.deck[i].value = 12)
                        strcpy(str2.deck2[i].value2, "king");
                else if(str.deck[i].value = 11)
                        strcpy(str2.deck2[i].value2, "dama");
                else if(str.deck[i].value = 10)
                        strcpy(str2.deck2[i].value2, "jack");
                else if(str.deck[i].value = 9)
                        strcpy(str2.deck2[i].value2, "10");
                else if(str.deck[i].value = 8)
                        strcpy(str2.deck2[i].value2,"9");
                else if(str.deck[i].value = 7)
                        strcpy(str2.deck2[i].value2,"8");
                else if(str.deck[i].value = 6)
                        strcpy(str2.deck2[i].value2,"7");
                else if(str.deck[i].value = 5)
                        strcpy(str2.deck2[i].value2,"6");
                else if(str.deck[i].value = 4)
                        strcpy(str2.deck2[i].value2,"5");
                else if(str.deck[i].value = 3)
                        strcpy(str2.deck2[i].value2,"4");
                else if(str.deck[i].value = 2)
                        strcpy(str2.deck2[i].value2,"3");
                else if(str.deck[i].value = 1)
                        strcpy(str2.deck2[i].value2,"2");
        }
 
        for(i=0; i <10; i++){
 
                if(str.deck[i].suit = 'c')
                        strcpy(str2.deck2[i].suit2 , "clubs");
                else if(str.deck[i].suit = 'd')
                        strcpy(str2.deck2[i].suit2 , "diamonds");
                else if(str.deck[i].suit = 'h')
                        strcpy(str2.deck2[i].suit2, "hearts");
                else if(str.deck[i].suit = 's')
                        strcpy(str2.deck2[i].suit2 , "spades");
        }
 
        for(i=0; i<10; i++){
                printf("Card Value: %s Suit: %s \n", str2.deck2[i].value2, str2.deck2[i].suit2);
        }
}
спасибо, может другой способ есть?
или Struct2 не верно задано? вот структура какая была и ее надо изменить Card Value: 10 Suit: s Card Value: 9 Suit: s Card Value: 8 Suit: s Card Value: 7 Suit: h Card Value: 6 Suit: s Card Value: 5 Suit: d Card Value: 4 Suit: d Card Value: 3 Suit: h Card Value: 1 Suit: c Card Value: 1 Suit: d а вот что получается((( Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs Card Value: ace Suit: clubs

Решение задачи: «Assigning from int to char[10] from char to char[10]»

textual
Листинг программы
    const char *names[] = {
        "2", "3", "4", "5", "6",
        "7", "8", "9", "10",
        "jack", "queen", "king",
        "ace"
    };
    char *pname, *psuit;
    
    ...
    
    strcpy(pname, names[b.deck[i].value - 1]);

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

  1. В данном коде используется массив строк names[], который содержит набор имен и чисел. Каждое значение в массиве - это константный указатель на строку.
  2. В массиве names[] содержатся следующие значения: 2, 3, 4, 5, 6, 7, 8, 9, 10, jack, queen, king, ace.
  3. В коде также определены две переменные pname и psuit, которые будут использоваться для хранения значений из массива names[].
  4. Далее в коде происходит выделение памяти под строку pname и psuit с использованием оператора malloc().
  5. Затем происходит копирование строки из массива names[] в переменную pname с использованием функции strcpy().
  6. Аналогичным образом происходит копирование строки из массива names[] в переменную psuit.
  7. Значение переменной b.deck[i].value используется как индекс для доступа к соответствующему значению в массиве names[] для копирования в переменные pname и psuit.
  8. Значение b.deck[i].value представляет собой числовое значение, которое используется для определения индекса в массиве names[].
  9. В данном случае, b.deck[i].value будет находиться в диапазоне от 1 до 13, так как это значения от 2 до 14, но включая 1 и пропуская 13.
  10. Функция strcpy() используется для копирования строки из одного указателя в другой.
  11. После выполнения всех операций, переменные pname и psuit будут содержать строки, которые были скопированы из массива names[].
  12. Важно отметить, что в данном коде не обрабатываются ошибки, связанные с выделением памяти или копированием строк.
  13. Также стоит учесть, что код может вызвать проблемы с безопасностью, так как функция strcpy() может быть небезопасной при использовании с ненадежными входными данными.
  14. Для улучшения безопасности кода, можно использовать функцию strncpy(), которая позволяет указать максимальное количество символов для копирования.
  15. Важно также отметить, что использование оператора malloc() может привести к проблемам с памятью, если код не правильно управляет выделенной памятью.
  16. Для улучшения управления памятью, можно использовать библиотеки, такие как stdlib.h, которые предоставляют функции для работы с памятью, такие как free().
  17. В данном коде не происходит проверки на достаточность выделенной памяти для строк pname и psuit.
  18. Для улучшения стабильности кода, можно добавить проверки на достаточность памяти перед вызовом функции malloc().
  19. Важно также отметить, что в данном коде не происходит обработки символов, которые могут быть интерпретированы как специальные символы или символы новой строки.
  20. Для улучшения обработки строк, можно использовать функции, такие как strlen(), strchr(), strrchr(), которые предоставляют дополнительные возможности для работы со строками.

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


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

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

10   голосов , оценка 3.9 из 5