2014-09-24 5 views
0

저는 이것이 프로그램을 만드는 펑키 한 방법이라는 것을 알면서 시작하겠습니다.하지만 선생님은 우리가이 방법을 사용하도록 요구하고 있습니다.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? 
+0

전체 사례를 줄이면서 최소한으로 작성하십시오. 실제 코드. 문제를 설명하십시오. –

+1

동적으로 할당 할 필요가없는 것들을 동적으로 할당해서는 안됩니다. 예를 들어'(* deckPtr) .suit = new char [8]'및 ((* deckPtr) .rank = new char [7]'). 들여 쓰기는 코드를 읽는 것을 매우 어렵게 만듭니다. – Jason

+0

데크에 대한 포인터 또는 카드에 대한 포인터가 있는지 알려주는 변수 이름을 사용하십시오. 나는 당신이 그들을 섞어 버리는 것 같아. 나는 하나의 데크 포인터를 가지고 있고, 반복기와 같은 카드 포인터를 사용한다. –

답변

0

있습니다.

이를 위해

다음과 같은 설정을해야합니다 당신이 선언 할 때,

struct cardstruct { 
    char *suit; 
    char *rank; 
    int cvalue; 
}; 

typedef struct cardstruct card; 

을 달리 포인터를 사용하려면 "struct"keword를 먼저 사용해야합니다. E.G .:

struct card *deckPtr = new struct card[52]; 
+1

이것은 C++에서 필요하지 않습니다. http://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c – dari

관련 문제