Хорошо, я работаю над проектом, который имеет дело с карточками и должен знать, сколько из каждого костюма и сколько у каждого из них есть, чтобы он мог его оценить. (Я не ожидаю, что вы делаете это для меня, я просто нужна помощь понимание.) Я продолжаю получать предупреждения, которые говорят:Проблемы с указателями в программе C
«слишком много аргументов для формата»
«передавая аргумент 1 из«suitsInHand из несовместимого указателя»
„инициализация делает целое число от указателя без броска“
„сравнение между указателем и целым“
Я перечитал главу на указателях в 3 раза, и теперь я до сих пор путаю с как использовать t рубчик. Если кто-то может объяснить, что не так с моим кодом, поэтому я могу попытаться правильно его закодировать, я бы очень признателен. Я помещал ** ** вокруг предупреждающих строк, чтобы я их написал.
Эти функции, определенные в начале программы
// prototypes
void shuffle(unsigned int wDeck[][ FACES ]); // shuffling modifies wDeck
void deal(unsigned int wDeck[][ FACES ], const char *wFace[], const char *wSuit[]); // dealing doesn't modify the arrays
void handDeal(unsigned int wDeck[][ FACES ], const char *wFace[], const char *wSuit[]);
void determineHand(unsigned int suitsInHand[], unsigned int facesInHand[]);
int suitsInHand(unsigned int wDeck[][ FACES ], const char *wSuit[ ]);
int facesInHand(unsigned int wDeck[][ FACES ], const char *wFace);
И это позже в функции, где я, имеющий наибольшие проблемы. wDeck и wFace происходят из функций тасования и обработки. Рука наносит 5 карт в порядке, это получает эту информацию, вот в чем проблема.
void handDeal(unsigned int wDeck[][ FACES ], const char *wFace[], const char *wSuit[])
{
size_t cardCount;
size_t row;
size_t column;
// deal each of the cards
for (cardCount = 1; cardCount <= 5; ++cardCount) {
// loop through the rows of wDeck
for (row = 0; row < SUITS; ++row) {
// loop through columns of deck for current row
for (column = 0; column < FACES; ++column) {
// if slot contains current card, display card
if (wDeck[ row ][ column ] == cardCount) {
**printf("\n%5s of %-8s", wFace[ column ], wSuit[ row ], cardCount);**
} // end if
} // end 2nd inner for
} // end inner for
} // end outer for
//int *suitPtr = &wSuit[ & wFace[ column ], &wSuit[ row], cardCount ];
//in *facePtr = &wFace[ column ];
**suitsInHand(&wDeck, wSuit[ row ]);**
//facesInHand(&wDeck, &wFace[ column ]);
} // end function handDeal
// determine suits in hand
int suitsInHand(const char )
{
size_t suitCount; // counter
size_t row;
int totalSuits; // total number of suits in hand
**int suit = wSuit[ row ];**
// determine number of suits
for (suitCount = 0; suitCount <= 4; ++suitCount) {
**if (wSuit[ row ] <= 4) {**
totalSuits = suit % 4;
printf("\nYou have %d suits", totalSuits);
} // end if
} // end for
} // end function suitsInHand
// determine faces in hand
/*int facesInHand(unsigned int wDeck[][ FACES ], const char *wFace[])
{
int totalFaces = 0;
*facePtr = *facePtr % 13;
printf("\nYou have %d faces", *facePtr);
} // end function facesInHand */
строка определенно не определена, но распределение массивов отлично подходит для C99 (VLA). – Olaf
@Olaf - я неправильно читаю строку, где, как я думал, код выделяет массив на основе неопределенной переменной. Приведенный выше пример кода фактически не показывает, как распределяется массив. Если, однако, массив выделяется неизвестным размером, у вас возникнут потенциально опасные проблемы. Например, если 'char wSuit [строка]' и строка получает программно, как компилятор знает, определять ли массив как размер 5 или 5000 или ??? – jfrattarola
@jfrattarola Массивы 'define'd в начале кода, у меня просто не было этой части. И спасибо, это помогло немного по крайней мере. –