私の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());
Visual Studioには、本当に使用しなければならない非常に優れたデバッガがあります。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv
ファイルを読み込むための好ましい方法は:while(readFile >> room.roomno >> room.price) 'です。 –