C++ 覆盖和追加文本文件中的行(C+;+;)
我试图在没有太多I/O或使用文本文件经验的情况下完成CSE实验室。该程序的目标是根据用户输入的单词和定义创建词典。输出文本文件的格式应为 条目数(以数字形式) 话 定义 话 定义 等等 此时,如果您所有的单词都是“Alberta”,并且定义为“Threesome”,则输出为: 一, 阿尔伯塔省 三人行 2阿尔贝塔 三人行 2阿尔贝塔 三人行 很明显,有些事情很不对劲。下面是生成的代码:很抱歉,如果它很混乱,并且输出语句之间的分隔很奇怪,我已经试着弄清楚这一点有一段时间了C++ 覆盖和追加文本文件中的行(C+;+;),c++,file,text,append,overwrite,C++,File,Text,Append,Overwrite,我试图在没有太多I/O或使用文本文件经验的情况下完成CSE实验室。该程序的目标是根据用户输入的单词和定义创建词典。输出文本文件的格式应为 条目数(以数字形式) 话 定义 话 定义 等等 此时,如果您所有的单词都是“Alberta”,并且定义为“Threesome”,则输出为: 一, 阿尔伯塔省 三人行 2阿尔贝塔 三人行 2阿尔贝塔 三人行 很明显,有些事情很不对劲。下面是生成的代码:很抱歉,如果它很混乱,并且输出语句之间的分隔很奇怪,我已经试着弄清楚这一点有一段时间了 #include <
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
using namespace std;
int main()
{
string name; // Name of writing/reading document
cout << "Please enter the path (including file name) for the dictionary you want to create: " ;
getline(cin,name); // Inputs name
fstream dicFile;
int addcount = 0; // number of times file has been added to.
int choice = 0; // Controls while loop
while (choice != 3)
{
cout << "- - - - - - - - - -" << endl;
cout << "1) Add a word to the dictionary" << endl;
cout << "2) Print Dictionary" << endl;
cout << "3) Quit" << endl;
cout << "Choose an option from the menu: ";
string choiceS;
getline(cin,choiceS);
choice = atoi(choiceS.c_str());
string wordAdd; // Stores word to be added
string defAdd; // Stores definition to be added
int size = 1; // Number of entries after the first entry
if(choice > 0 && choice < 4)
{
cout << "- - - - - - - - - -" << endl;
if(choice == 1)
{
if(addcount == 0)
{
dicFile.open(name.c_str(),ios::in|ios::out|ios::app);
cout << "Enter a word or phrase to add to the dictionary: ";
getline(cin,wordAdd);
dicFile << size;
dicFile << endl;
dicFile << wordAdd;
dicFile << endl;
cout << "Enter the definition for \"" << wordAdd << "\": ";
getline(cin,defAdd);
dicFile << defAdd << endl;
dicFile.close();
addcount++;
}
else
{
dicFile.open(name.c_str(),ios::in|ios::out|ios::app);
size = size + 1;
dicFile << size;
dicFile.close();
dicFile.open(name.c_str(),ios::in|ios::out|ios::app);
cout << "Enter a word or phrase to add to the dictionary: ";
getline(cin,wordAdd);
dicFile << wordAdd;
dicFile << endl;
cout << "Enter the definition for \"" << wordAdd << "\": ";
getline(cin,defAdd);
dicFile << defAdd << endl;
dicFile.close();
}
}
if(choice == 2)
{
if(true)
{
dicFile.open(name.c_str(),ios::in);
string readSize;
int readSizei;
getline(dicFile,readSize);
readSizei = atoi(readSize.c_str());
for(int i = 0; i < readSizei*2 + 1; i++)
{
string word;
string def;
getline(dicFile,word);
cout << word << endl;
getline(dicFile,def);
cout << def << endl;
}
dicFile.close();
}
else
{ cout << "- - - - - - - - - -" << endl;
cout << "The dictionary is empty!" << endl;
}
}
}
else
{ cout << "- - - - - - - - - -" << endl;
cout << "Invalid menu selection (number should be between 1-3)" << endl;
}
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串名称;//写/读文档的名称
cout您不能“就地”修改现有文件。相反,您必须创建一个新的临时文件,并在需要修改的情况下将所有内容复制到临时文件。然后将临时文件重命名为原始文件,从而替换它
在伪代码中:
open_old_file();
create_temporary_file();
while (read_line_from_old_file())
{
do_possible_modifications_to_line();
write_line_to_temporary_file();
}
close_temporary_file();
close_old_file();
rename_temporary_file_to_old_file();
// or if the above doesn't work:
// copy_temporary_file_to_old_file();
// delete_temporary_file();
听起来很简单,但我该怎么做呢?非常感谢你的时间,我会试试的。