저는 이것이 프로그램을 만드는 펑키 한 방법이라는 것을 알면서 시작하겠습니다.하지만 선생님은 우리가이 방법을 사용하도록 요구하고 있습니다.struct 배열에 메모리를 동적으로 할당합니다.
도 : 이 프로젝트에서는 std :: string, classes, constructor를 사용할 수 없습니다. 구조체 외부에서 발생하는 동적 메모리 할당과 함께이 스타일의 C 스타일 문자열을 사용해야합니다.이 방법을 사용하는 가장 좋은 방법은 아니지만, 내가 갈 수는 없습니다. :(
는 는임은 구조체와 붙어, 나는 파악하지 못할 무슨 잘못 ..
를 내가 작업 코드, 당신은 유형 이름의 카드가 필요합니다 들어 구조체
#include <iostream>
#include <fstream>
#include <ctime>
#include <stdlib.h>
#include <string>
using namespace std;
//global constant(s)
const int maxCards = 52;
//Structs
struct card
{
char *suit;
char *rank;
int cvalue;
char location;
};
//Function List
void readPlayers(player *peoplePointer);
void shuffleCards(card *unshuffled, card* shuffled);
//program
int main()
{
//create pointer and set initial value
card * deckPointer = new card[52];
card *deckHome = &deckPointer[0];
for(int i=0;i<maxCards;i++)
{
(*deckPointer).suit=new char[8];
(*deckPointer).rank = new char[7];
deckPointer++;
}
deckPointer = deckHome;
cardInit(deckPointer);
readDeck(deckPointer);
//sets default values for the card arrays
for(int i=0;i<52;i++)
{
strcopy((*deckPointer).suit,"suit");
strcopy((*deckPointer).rank,"rank");
(*deckPointer).cvalue = 0;
deckPointer++;
}
deckPointer = deckHome;
return 0;
}
//Functions
void cardInit(card *deckPointer)
{
card * deckHome = NULL;
deckHome = &deckPointer[0];
//set up card file to be read in
ifstream fin;
char *finName = new char[13];
//get file name from user
cout << "Enter file name...(cardFile.txt)" << endl;;
cin >> *finName;
//open the file
fin.open(finName);
//check if cardFile.txt opens correctly
if(!fin.good())
{
cout << "Error with card file" << endl;
}
else
{
deckPointer = deckHome;
while(fin.good())
{
for(int i=0;i<50;i++)
{
fin >> (*deckPointer).suit;
fin >> (*deckPointer).rank;
fin >> (*deckPointer).cvalue;
deckPointer++;
}
}
}
delete [] finName;
}
//Its a pretty simple program..and my dynamic memory works for
//the file name, but I cant figure out why it doesnt work for structs?
전체 사례를 줄이면서 최소한으로 작성하십시오. 실제 코드. 문제를 설명하십시오. –
동적으로 할당 할 필요가없는 것들을 동적으로 할당해서는 안됩니다. 예를 들어'(* deckPtr) .suit = new char [8]'및 ((* deckPtr) .rank = new char [7]'). 들여 쓰기는 코드를 읽는 것을 매우 어렵게 만듭니다. – Jason
데크에 대한 포인터 또는 카드에 대한 포인터가 있는지 알려주는 변수 이름을 사용하십시오. 나는 당신이 그들을 섞어 버리는 것 같아. 나는 하나의 데크 포인터를 가지고 있고, 반복기와 같은 카드 포인터를 사용한다. –