Assigning from int to char[10] from char to char[10] - C (СИ)
Формулировка задачи:
добрый день, подскажите пожалуйста, в карточной колоде 52 карты, у меня есть массив структур
где Value 1 2 3 ...13
suit c h d s
нужно распечатать имена туз, король, ....10. ...2
и соответственно
clubs
diamonds
hearts
spades
я создала новую структуру
и использовала Strcpy для присвоения
но ответ не верный....
спасибо, может другой способ есть?
struct card{ int value; char suit; }; struct board{ struct card deck[52]; };
struct card2{ char value2[10]; char suit2[10]; }; struct board2{ struct card2 deck2[10]; };
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]);
Объяснение кода листинга программы
- В данном коде используется массив строк
names[]
, который содержит набор имен и чисел. Каждое значение в массиве - это константный указатель на строку. - В массиве
names[]
содержатся следующие значения:2
,3
,4
,5
,6
,7
,8
,9
,10
,jack
,queen
,king
,ace
. - В коде также определены две переменные
pname
иpsuit
, которые будут использоваться для хранения значений из массиваnames[]
. - Далее в коде происходит выделение памяти под строку
pname
иpsuit
с использованием оператораmalloc()
. - Затем происходит копирование строки из массива
names[]
в переменнуюpname
с использованием функцииstrcpy()
. - Аналогичным образом происходит копирование строки из массива
names[]
в переменнуюpsuit
. - Значение переменной
b.deck[i].value
используется как индекс для доступа к соответствующему значению в массивеnames[]
для копирования в переменныеpname
иpsuit
. - Значение
b.deck[i].value
представляет собой числовое значение, которое используется для определения индекса в массивеnames[]
. - В данном случае,
b.deck[i].value
будет находиться в диапазоне от 1 до 13, так как это значения от 2 до 14, но включая 1 и пропуская 13. - Функция
strcpy()
используется для копирования строки из одного указателя в другой. - После выполнения всех операций, переменные
pname
иpsuit
будут содержать строки, которые были скопированы из массиваnames[]
. - Важно отметить, что в данном коде не обрабатываются ошибки, связанные с выделением памяти или копированием строк.
- Также стоит учесть, что код может вызвать проблемы с безопасностью, так как функция
strcpy()
может быть небезопасной при использовании с ненадежными входными данными. - Для улучшения безопасности кода, можно использовать функцию
strncpy()
, которая позволяет указать максимальное количество символов для копирования. - Важно также отметить, что использование оператора
malloc()
может привести к проблемам с памятью, если код не правильно управляет выделенной памятью. - Для улучшения управления памятью, можно использовать библиотеки, такие как
stdlib.h
, которые предоставляют функции для работы с памятью, такие какfree()
. - В данном коде не происходит проверки на достаточность выделенной памяти для строк
pname
иpsuit
. - Для улучшения стабильности кода, можно добавить проверки на достаточность памяти перед вызовом функции
malloc()
. - Важно также отметить, что в данном коде не происходит обработки символов, которые могут быть интерпретированы как специальные символы или символы новой строки.
- Для улучшения обработки строк, можно использовать функции, такие как
strlen()
,strchr()
,strrchr()
, которые предоставляют дополнительные возможности для работы со строками.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д