2017-12-14 2 views
1

私のC++プロジェクトに問題があります。私は部屋番号と価格で記載された部屋を持っている、私はそれの番号を入力する部屋を削除したい。 以下は私のコードです。私は多くのコードを試みたが、何も働かなかった。私の最初の削除機能は、部屋1を削除したいときに1で始まるすべての行を削除することでした。 これを変更しましたが、そのコードはファイルの最初の行だけを別のファイルに取得します。数字のファイルから行を削除する

コード1:それが唯一のソースからの一時ファイルの最初の行を取る(int型で識別roomno)

void deleteRoom() { 
    rooms room; 
    string source; 
    string line; 
    source = "Room.txt"; 
    { 
     ifstream readFile; 
     readFile.open("Room.txt"); 
     system("cls"); 
     cout << "Room Number" << setw(13) << "Price" << "\n---------------------------------------------\n"; 
     while (true) { 
      readFile >> room.roomno >> room.price; 
      if (readFile.eof()) { break; } 
      cout << setw(6) << room.roomno << setw(16) << room.price << " $" << endl; 
     } 
     readFile.close(); 
     cout << "---------------------------------------------\n" << "Enter the room number that you want to remove : "; 
     cin >> room.roomno; 
     ifstream s(source); 
     ofstream t("temp.txt"); 
     while (getline(s, line)) { 
      int len; 
      if (room.roomno > 0) { 
       for (len = 0; room.roomno > 0; len++) { 
        room.roomno = room.roomno/10; 
        int n = len; 
        int abc = atoi(line.c_str()); 
        if (abc != room.roomno) 
         t << satir << endl; 
       } 
      } 
     } 
     t.close(); 
     s.close(); 
     remove(source.c_str()); 
     rename("temp.txt", source.c_str()); 
    } 
} 

コード2:私は、削除したい部屋番号を入力すると、それはすべての行を削除しますこの番号で始まります。たとえば、1と入力すると、1で始まるすべての部屋が削除されます。

roomnoは文字列で識別されます。

ifstream s(source); //string line and string source before that 
ofstream t("temp.txt"); 
while (getline(s, line)) 
{ 
    int n; 
    if (room.roomno.size() == 1) n = room.roomno.size(); 
    else if (room.roomno.size() == 2) n = room.roomno.size() + 1; 
    else if (room.roomno.size() == 3) n = room.roomno.size() + 2; 
    else if (room.roomno.size() == 4) n = room.roomno.size() + 3; 
    string abc = line.substr(0, n); 
    if (abc != room.roomno) 
     t << line << endl; 
} 
t.close(); 
s.close(); 
remove(source.c_str()); 
rename("temp.txt", source.c_str()); 
+2

Visual Studioには、本当に使用しなければならない非常に優れたデバッガがあります。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv

+0

ファイルを読み込むための好ましい方法は:while(readFile >> room.roomno >> room.price) 'です。 –

答えて

1

あなたのプログラムを簡素化することができる:上記のスニペットで

rooms room; 
int room_to_delete = 0; 
cout << "Enter room to be deleted: "; 
cin >> room_to_delete; 
while (readfile >> room.roomno >> room.price) 
{ 
    if (room.roomno != room_to_delete) 
    { 
    t << room.roomno << room_to_delete << "\n"; 
    } 
} 

、部屋には、ソースファイルから読み込まれます。削除する部屋でない場合は、出力ファイルtにコピーされます。

ファイル全体をstd::vectorに読み込み、std::vectorを変更してから、std::vectorを新しいファイルに書き込むなどの方法があります。

+0

ありがとうございましたが、私はそれを試みましたが、今では番号を入力するとすべての行が削除されます – rebelleous