我的数据显示2两次,而使用功能?操作文件c++ - Case:删除c++中的特定行



我的任务是:写一个简单的程序,可以用来删除一个数据在文件中指定一行,步骤如下:手动创建包含以下内容的文件:

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和许多其他问题的巨大来源。在您的代码中还有其他几个。

相关内容

  • 没有找到相关文章

最新更新