2012-11-13 3 views
2

에는 사용자에게 파일 이름을 입력 한 다음 해당 파일을 가져 와서 구조체 배열을 만들도록 요청하는 프로젝트가 있습니다. 나는 완전히 잃어 버렸다! 여기 내가 지금까지 가지고있는 것입니다.txt 파일의 구조체 배열

#include <iostream> 
#include <fstream> 
#include <string> 
#include <iomanip> 

using namespace std; 

string filename; 
ifstream inFile; 

struct ftballPlayer 
{ 
    int NO; 
    string first; 
    string last; 
    char POS; 
    char clas; 
    int height; 
    char ds; 
    int iheight; 
    string hometown; 
}; 

int counter=0; 
const int MAX_PLAYER=50; 
void printList(const ftballPlayer list[], int listSize); 
void printOne (ftballPlayer two); 
void getData(ifstream& inFile, ftballPlayer list[], int& listSize); 

int main() 
{ 
    ftballPlayer list[MAX_PLAYER] ; 
    cout << "Enter the name of the input file: " ; 
    cin >> filename; 

    inFile.open(filename.c_str() ); 

    if (!inFile) 
    { 
     cout<<"Cannot Open Input File."<<endl; 
     cout<< "Program Terminates!"<<endl; 
     return 1; 
    } 

    inFile.ignore (200,'\n'); 
    getData (inFile, list, counter); 

    for (counter = 0;counter < 50;counter++) 
    { 
     printOne (list[ counter]) ; 
     cout <<endl; 
    } 

    return 0; 
} 

void getData(ifstream& inFile, ftballPlayer list[], int& listSize) 
{ 
    ftballPlayer item ; 
    listSize = 0; 

    inFile >> item.NO >> item.first >> item.last 
      >> item.POS >> item.clas >> item.height 
      >> item.ds >> item.iheight >> item.hometown; 

    while (inFile) 
    { 
     list [listSize ] = item ; 
     listSize++; 

     inFile >> item.NO >> item.first >> item.last 
       >> item.POS >> item.clas >> item.height 
       >> item.ds >> item.iheight >> item.hometown; 
    } 

    inFile.close() ; 

} 

void printList(const ftballPlayer list[], int listSize) 
{ 
    int looper; 

    for (looper = 0; looper < listSize ; looper++) 
    { 
     printOne (list [looper] ); 
     cout << endl ; 
    } 
} 

void printOne (ftballPlayer one) 
{ 
    cout << fixed << showpoint << setprecision (2); 
    cout << "NO " << one.NO; 
    cout << setw(5) << left << " Name: " << one.first << " " << one.last; 

    cout << " POS " << one.POS << setw(5); 
    cout << "Class "<<one.clas<<setw (5); 
    cout << "Height "<<one.height<<" "<<one.ds<<" "<<one.iheight<<setw(5); 
    cout << "Hometown " << one.hometown << endl; 
} 

내가 올바른 길을 가고 있는지 누군가가 말해 줄 수 있습니까? 내가 얻은 인쇄물은이 텍스트 파일에 근접하지 않습니다.

NO NAME의 POS 클래스 HEIGHT 중량 고향/고등학교
60 조쉬 만 OL SO 6-4 (300) 버지니아 비치, Va./Ocean 호수
64 리키 SEGERS K/P FR 5-11/마지막 대학 185 Glen Allen, Va./Henrico
70 Brandon Carr OL RS_SR 6-2 305 Chesapeake, Va./Western Branch/포크 연합 군사 아카데미
53 Calvert Cook LB FR 6-0 250 노퍽, 버지니아/북 T. 워싱턴
51 Michael Colbert DE RS_SR 6-1 230 Fayetteville, NC/EE Smith
22 T.J. Cowart CB RS_JR 5-9 190 버지니아 비치, VA/오션 레이크
1 Jakwail Bailey WR SO 5-11 185 Haddonfield, NJ/Paul VI
25 Andre Simmons S JR 6-0 205 버지니아 주 로턴/버지니아 주/사우스 카운티/밴더빌트
34 Johnel 앤더슨 RB FR 5-8 180 Sicklerville, NJ/폴 VI

이것은 사용자가 입력되지만 모두 동일한 유형의 정보를 가질 수있는 세 가지 중 하나이다. 나는 내 교과서를보고 몇 시간 동안 온라인으로 사냥을 해왔고 사용자가 파일로 시작하는 대신 파일을 입력 할 때이 작업을 수행 할 수있는 방법을 찾지 못했습니다. 어떤 도움이나 방향을 주시면 감사하겠습니다.

+0

현재 출력을 게시하십시오. – PearsonArtPhoto

답변

0

몇 가지 잘못된 점을 바로 알게되었습니다.

struct ftballPlayer 
{ 
     int NO; 
     string first; 
     string last; 
     char POS; // Should be multiple characters 
     char clas; // Should be multiple characters 
     int height; 
     char ds; 
     int iheight; 
     string hometown; 
}; 

POS/clas에 맞는 크기를 얻으면 더 잘 작동한다고 생각합니다. 왜 그들을 끈으로 만들지 않겠습니까?

또한 마지막 비트를 읽는 중 일부 문제가 있습니다. /을 찾아야 만하는 것처럼 보입니다. /는 여러 부분을 구분하여 알려주지 만, 나는 그렇게하는 것을 보지 못합니다.

전체적으로 입력 형식을 변경할 수 있다면 이것을 읽는 것이 훨씬 깔끔하지만 사용자가 할 수 없다고 생각됩니다. 쉼표로 구분 된 값은 다른 구분선처럼 읽기가 쉽습니다.

+0

나는 처음부터 끝까지 문자열을 만들려고했고 같은 결과를 보았습니다. –

+0

나는 거의 내가 거기에 있다고 생각한다. 나는 POS와 clas를 현 (string)으로 바꿨다. 그것은 내가 고향과 학교 라인에 걸리는 것을 도왔다. 첫 번째 라인처럼 Virginia Beach는 고향이며 Ocean Lakes는 학교입니다. 나는 학교를위한 문자열을 추가했으나 버지니아가 고향과 해변을 위해 인쇄 한 공간 때문에 학교에 인쇄합니다. 문자열을 공백으로 포함하려면 어떻게해야합니까? –