0

我正在编写一个处理文件的 C++ 应用程序。我已经实现了标准操作,例如从文件中写入和读取,一些搜索功能等。

做了一些操作后,我的输出字符串以一种非常奇怪的方式出现。例如文本“地址 -”,作为“?п&&..&”出现:

在此处输入图像描述

在此处输入图像描述

C++ 中是否有任何缓冲区可能被文件操作填满并且它正在执行此输出,所以我需要清空它或清理它?

编辑:当我编写一个从文件中读取记录的函数时出现问题,根据用户标准选择其中一些然后对它们进行排序。

这是我的代码:

结构:

    struct Appartament
    {
         char address[50];
         char telephoneNumber[20];
         char view[10];

         double price;
         double distanceFromCenter;

         int roomCount;
     };

处理文件的函数:

    //Search by room count and order by price (rising)
    void AdvanceSearch()
    {
        clrscr();

        Appartament currentRecord;
        int recordsCount=0;

        fstream currentFile("Records.dat",ios::binary|ios::in);

        if(!currentFile)
        {
            cout<<"Error - the file could not be opened."<<endl;
            return;
        }
        else
        {
            //Array with apartments records
            Appartament CurrentRecords[MaxRecords];

            currentFile.seekg(0L,ios::end);
            long int length=currentFile.tellg();
            currentFile.seekg(0L,ios::beg);

            int isAppartamentFound=0;

            if(length==0)
            {
                cout<<"The file is empty."<<endl;
                return;
            }
            else
            {
                int userRoomCount;

                do
                {
                    clrscr();
                    cout<<"Enter apartment room count - ";
                    cin>>userRoomCount;
                }while(userRoomCount<0);

                clrscr();

                cout<<endl<<"Apartments with "<<userRoomCount<<" rooms order by price:";

                currentFile.read((char*)(&currentRecord),sizeof(Appartament));

                while(!currentFile.eof())
                {
                    if(currentRecord.roomCount==userRoomCount)
                    {
                        CurrentRecords[recordsCount]=currentRecord;
                        recordsCount++;
                        isAppartamentFound=1;
                    }

                    currentFile.read((char*)(&currentRecord),sizeof(Appartament));
                }

                currentFile.close();
            }

            if(isAppartamentFound==0)
            {
                cout<<endl<<"There are no matches!"<<endl;
            }
            else
            {
                //If only one apartment is found
                if(recordsCount==1)
                {
                    cout<<endl;
                    ShowRecord(currentRecord);

                }
                else
                {
                    //Sort the records

                    Appartament tempApartament;

                    int isChangeMade=1;

                    for(int index=0;index<recordsCount;index++){

                          //ShowRecord(CurrentRecords[index]);
                    }

                    while(isChangeMade==1)
                    {
                        isChangeMade=0;

                        for(int index=0;index<recordsCount-1;index++)
                        {
                            if(CurrentRecords[index].price>CurrentRecords[index+1].price)
                            {
                                isChangeMade=1;

                                tempApartament=CurrentRecords[index];
                                CurrentRecords[index]=CurrentRecords[index+1];
                                CurrentRecords[index+1]=tempApartament;
                            }
                        }
                    }

                    for(index=0;index<recordsCount;index++)
                    {
                        ShowRecord(CurrentRecords[index]);
                    }
                }
            }
         }
    }

显示记录的功能:

    void ShowRecord(Appartament Record)
    {
        cout<<"Apartment Information"<<endl;
        cout<<"The address is - "<<Record.address<<" and it is only "<<Record.distanceFromCenter<<" miles away from the center."<<endl;
        cout<<"The price is "<<Record.price<<" $ for "<<Record.roomCount<<" rooms with "<<Record.view<<" view."<<endl;
    }

Т这是可能的输出:

在此处输入图像描述

我已经用其他版本的 Borland 在其他机器上运行了我的程序,它运行良好。这就是为什么问题是我的编译器出了什么问题:?

4

0 回答 0