манипулирование файлами - PullRequest
       1

манипулирование файлами

0 голосов
/ 24 августа 2010

на c ++ я написал простую программу, которая принимает от 4 до 6 записей, а затем больше не принимает, когда Airlines_no такое же, то есть 1?Исходный код:

#include<fstream.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#include<stdlib.h>
#include<process.h>
#include<stdio.h>
int lno;
struct airln {int airline_no,routeno,dep_time,arr_time;
    char port_d[15],port_a[15],week_day[10];  }r2;

class route
{
 public:
    void getroute()
    {

        cout<<"\n\tRoute no.: ";
        cin>>r2.routeno;cout<<"\n";
        cout<<"\tDay of Departure: ";
        gets(r2.week_day);cout<<"\n";
                cout<<"\tAirport for departure: ";
        gets(r2.port_d);cout<<"\t";
        cout<<"Departure Time: ";
        cin>>r2.dep_time;cout<<"\n";
        cout<<"\tAirport for arrival: ";
        gets(r2.port_a);cout<<"\t";         
                cout<<"Arrival Time: ";
        cin>>r2.arr_time;cout<<"\n";
        cout<<"\n\tAirline no.: ";
        cin>>r2.airline_no;
    }
    void display_route()
    {
    cout<<"\n    Route No : ";cout<<r2.routeno;
    cout<<"\n    ";
    cout<<r2.port_d;cout<<"\t";
    cout<<r2.dep_time;cout<<"\t\t";
    cout<<r2.port_a;cout<<"     \t";
    cout<<r2.arr_time;cout<<"\t\t";
    cout<<r2.week_day;cout<<"\n";
    }
}r3;
void main()
{
    clrscr();
    int airlnno,rtnodel,cntr;
    char airlinename[30];
    ifstream fin,fin1;
    ofstream fout;

    do
    {
    cout<<"\t1. Insert Data.\n";
    cout<<"\t2. View Data.\n";
    cout<<"\t3. Exit.\n";
    cout>>"\tEnter Choice : ";cin>>cntr;
    switch(cntr)
    {

           case 1:r3.getroute();
                   fout.open("testdata.dat",ios::app);
                   if(!fout)
                   {
                        gotoxy(25,10);
                        cout<<"No file exists or file can\'t be opened\n";
                        gotoxy(25,22);
                        cout<<"Please Press Any Key to Continue.......";
                        getch();
                        clrscr();
                       }
                   fout.write((char *) &r2,sizeof(r2));
                   fout.close();
                   clrscr();
                   break;
        case 2:fin.open("testdata.dat",ios::in);
               if(!fin)
               {
                gotoxy(25,20);
                cout<<"No file exists or file can\'t be opened\n";
                gotoxy(25,22);
                cout<<"Please Press Any Key to Continue.......";
                getch();
                clrscr();
                break;
               }
               cout<<"\n    Dep-Airport\t";
               cout<<"Dep-Time\t";
               cout<<"Arr-Airport\t";
               cout<<"Arr-Time\t";
               cout<<"Week Day\n";
               fin.read((char *) &r2,sizeof(r2));
               while(!fin.eof())
               {
            r3.display_route();
            fin.read((char *) &r2,sizeof(r2));
               }
               fin.close();
               gotoxy(25,22);
               cout<<"Please Press Any Key to Continue.......";
               getch();
               clrscr();
               }
               } while(!(cntr==3));
}

Ответы [ 2 ]

0 голосов
/ 24 августа 2010

Вам необходимо очистить cin после получения каждого ввода каждый раз.Вероятно, в начале цикла do while.Значение cntr может быть взято из ранее введенных значений.Если это значение равно 3, оно завершает цикл while и не принимает дальнейшие записи.

Попробуйте функции cin.clear () или cin.ignore () в начале цикла do while.

Можно сослаться Как очистить буфер cin?

0 голосов
/ 24 августа 2010

Вы должны использовать файлы для этого? Вы всегда можете использовать std :: map и сохранить в качестве ключа авиакомпании__

Я бы также не использовал глобальную структуру и класс.

Редактировать: k, у меня проблема, и я обнаружил, что проблема в 1050. Я могу перенести это на более раннюю запись, и это тоже на этом остановится. Я думаю, что проблема в том, что 1050 каким-то образом вызывает конец файла. Попробуйте следующие строки замены, чтобы открыть файл в двоичном виде:

fout.open("testdata.dat",ios::app | ios::binary);
fin.open("testdata.dat",ios::in | ios::binary);

вместо:

fout.open("testdata.dat",ios::app);
fin.open("testdata.dat",ios::in);

Редактировать: только что проверил и 1050 преобразуется в 041A, что переводится в символы Конец передачи, а затем .... SUB или EOF. Я думаю, что это ваша проблема, и в двоичном режиме это больше не должно быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...