2016-11-30 4 views
-2

내 전체 코드는 pastebin입니다. 기차 데이터베이스가 있으며 사용자가 티켓을 예약 할 기차 번호를 입력합니다. 함수 updt_tick은 열차 이름, 출발지 및 목적지 값을 승객의 예약 객체로 복사해야합니다. 그러나 문제는 5 번째 문자 이후 만 복사된다는 것입니다. updt_tick 함수는 87 줄에 있습니다. 함수의 코드 샘플은 다음과 같습니다. 사용자가 입력 한 datagse. 코드 블럭이 중요한 경우 사용합니다.strcpy는 sth 문자를 이후에 복사하고 있습니다. 이 오류를 해결하는 방법?

void updt_tick() 
{ 
    fstream f; 
    f.open("train.dat",ios::in | ios::binary); 
    while(f.read((char*)&t,sizeof(t))) 
    { 
     if (tno==t.tno) 
     { 
      strcpy(bp,t.source); 
      strcpy(dest,t.dest); 
      strcpy(tname,t.tname); 
      amt=SeatNum*t.PerSeatFare; 
      break; 
     } 
    } 
    f.close(); 
} 

기차 클래스입니다 ->

class train 
{ 
public: 
    int tno; 
    char tname[100]; 
    char source[100]; 
    char dest[100]; 
    int PerSeatFare; 

public: 
    void getdetail() 
    { 
     cout<<"Enter the details as follows\n"; 
     cout<<"Train no:"; 
     cin>>tno; 
     cin.ignore(); 
     cout<<"Train name:"; 
     gets(tname); 
     cout<<"Train Source Station:"; 
     gets(source); 
     cout<<"Tarin Destination Station:"; 
     gets(dest); 
     cout<<"Fare per seat in train :"; 
     cin>>PerSeatFare; 
    } 
    void showdetail() 
    { 
     cout<<tno<<"\t"<<tname<<"\t"<<source<<"\t"<<dest<<"\t"; 
     cout<<PerSeatFare; 
    } 
}t; 

RESERV 클래스는 -> `

class reserv   //Assume that cust select train according to his source and destination. 
{ 

public: 
    int pnr; 
    int tno; 
    char tname[100]; 
    char pnames[10][100]; 
    int ages[10]; 
    int SeatNum; 
    int i; 
    int d,m,y; 
    float amt; 
    char bp[100],dest[100]; 
    void updt_tick() 
    { 
     fstream f; 
     f.open("train.dat",ios::in | ios::binary); 
     while(f.read((char*)&t,sizeof(t))) 
     { 
      if (tno==t.tno) 
      { 
       strcpy(bp,t.source); 
       strcpy(dest,t.dest); 
       strcpy(tname,t.tname); 
       amt=SeatNum*t.PerSeatFare; 
       break; 
      } 
     } 
     f.close(); 
    } 

public: 
    void getresdet() 
    { 
     cout<<"Enter the details as follows\n"; 
     cout<<"Train no:"; 
     cin>>tno; 
     cout<<"No of seats required:"; 
     cin>>SeatNum; 
     cin.ignore(); 
     for(i=0; i<SeatNum ; i++) 
     { 
      cout<<"Passenger name:"; 
      gets(pnames[i]); 
      cout<<"Passenger age:"; 
      cin>>ages[i]; 
      cin.ignore(); 
     } 
     cout<<"Date of travel:"; 
     cin>>d>>m>>y; 
     cout<<"Details Accepted\n"; 
     pnr=rand(); 
     updt_tick(); 
    } 
    void showresdet() 
    { 
     cout<<"Pnr no:"<<pnr; 
     cout<<"\nTrain no:"<<tno; 
     cout<<"\nTrain name:"; 
     puts(tname); 
     cout<<"Boarding point:"; 
     puts(bp); 
     cout<<"Destination pt:"; 
     puts(dest); 
     cout<<"No of seats reserved:"<<SeatNum; 
     for(i=0; i<SeatNum; i++) 
     { 
      cout<<"Passenger name:"; 
      puts(pnames[i]); 
      cout<<"Passenger age:"<<ages[i]; 
     } 
     cout<<"\nDate of reservation:"<<d<<"-"<<m<<"-"<<y; 
     cout<<"\nYou must pay:"<<amt<<endl; 
    } 
    int getpnr() 
    { 
     return pnr; 
    } 
}; 
+0

그게't'입니까? –

+0

우리는't','bp','tname' 또는'tno'가 무엇인지 알지 못합니다. [MCVE] (http://stackoverflow.com/help/mcve) –

+0

을 제공하십시오. 이것을 'C++'및'string'으로 태그를 지정하십시오. 그것은'std :: string'을 의미합니다. 왜'std :: string'을 사용하지 않습니까? – PaulMcKenzie

답변

1

임 거기 때문에 당신이, 5 개 문자를 읽을 관리 않았다 방법을 잘 문제가 귀하의 코드에 있습니다. 열차 세부 정보를 저장하는 데 사용하는 파일은 "train.dat"가 아니라 "trainS.dat"입니다.

+0

오, 이런 젠장, 이런 멍청한 오류에 대해 깊이 사과드립니다. 모든 인풋 모두에게 감사드립니다. –