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(), которые предоставляют дополнительные возможности для работы со строками.