我的任务是:写一个简单的程序,可以用来删除一个数据在文件中指定一行,步骤如下:手动创建包含以下内容的文件:
i. Fill from line 1
ii. Fill from line 2
ii. Fill from line 3
iv. Fill in line 4
显示文件的全部内容。显示要删除多少行。•删除选中行的数据。显示文件的全部内容。
我已经创建了如下的程序:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
// Function Prototipe
void garis();
void show_databefore();
void show_data();
void del_line(const char *file_name, int n);
// Variable Declaration
int n;
ifstream myFile;
string output,buffer;
// Main Function
int main(){
cout << "Show data and delete specific line Program " << endl;
garis ();
cout << "The Data " << endl;
show_databefore();
garis();
cout << "Select the Rows of data you want to delete: ";
cin >> n;
cout << "nBefore " << endl;
// If Case after input n
if((0 < n) && (n < 100)){
del_line("data1.txt", n); // this process will delete the row that has been selected.
} else {
cout << "Error" << endl;}
show_data(); // when calling this function. Display on the console, data is displayed 2 times.
return 0;
}
//Function to delete data in the row that has been selected
void del_line(const char *file_name, int n){
ifstream fin(file_name);
ofstream fout;
fout.open("temp.txt", ios::out);
char ch;
int line = 1;
while(fin.get(ch))
{
if(ch == 'n')
line++;
if(line != n)
fout<<ch;
}
fout.close();
fin.close();
remove(file_name);
rename("temp.txt", file_name);
}
// Function to display data1.txt to the console
void show_databefore(){
myFile.open("data1.txt");
while (!myFile.eof()){
getline(myFile,buffer);
output.append("n" + buffer);
}
cout << output << endl;
myFile.close();
}
// Function to display data1.txt to the console T
// This fuction actually same as show_databefore.
void show_data(){
myFile.open("data1.txt");
while (!myFile.eof()){
getline(myFile,buffer);
output.append("n" + buffer);
}
cout << output;
myFile.close();
}
//Function to provide a boundary line.
void garis(){
cout << "======================================================= " << endl << endl;
}
当我运行我的程序时,它工作,但是当我将数据带到控制台时,我的数据出现了2次,我已经尝试了该方法而不使用该函数。然而,结果是一样的。
结果如下
有人能帮我吗?或者也许有更简单的方法来构建我的程序?谢谢你
这段代码有两种不同的bug
void show_data(){
myFile.open("data1.txt");
while (!myFile.eof()){
getline(myFile,buffer);
output.append("n" + buffer);
}
cout << output;
myFile.close();
}
第一个错误是错误地使用了eof
。第二个错误是使用全局变量output
。代码假定在输入函数时该变量是一个空字符串,但由于它是一个全局变量,因此无法确保这一点。这里是一个固定的版本,全局变量现在是一个局部变量,eof
问题已经修复。
void show_data(){
string output; // local variable
myFile.open("data1.txt");
while (getline(myFile,buffer)){
output.append("n" + buffer);
}
cout << output;
myFile.close();
}
不要不必要地使用全局变量,它们是bug和许多其他问题的巨大来源。在您的代码中还有其他几个。