c ++写入文件
c++ writing into a file
我正在编写代码来使用 avl 平衡树结构和文件处理来制作字典。用户输入单词及其含义。单词存储在树的节点中,单词及其含义存储在文本文件中。
当用户输入单词及其含义时,它应该存储在文件中:
单词“选项卡”的含义
但是单词和意思写在不同的两行上。
以下是我的代码:
#include <iostream>
#include<fstream>
#include<string.h>
using namespace std;
class node //Create a class for node.
{ public:
char keyword[10];
char meaning[100];
node *lc;
node *rc;
int h;
friend class avl;
};
class avl //Create a class for avl.
{public:
node* root;
avl()
{
root=NULL; //Initialise root to NULL.
}
node *insert(node *root,char[],char[]);
void insert1();
int height(node *);
int bal_fac(node*);
node *LL(node*);
node *LR(node*);
node *RL(node*);
node *RR(node*);
};
void avl:: insert1() //Insert1 function to read file contents.
{
char data[10]=" ";
char meaning[100];
cout<<endl<<"Enter word: ";
cin>>data;
int len=strlen(data);
len+=4;
char line[len];
cout<<endl<<"Enter its meaning: ";
cin.getline(meaning,100,'.');
fstream myfile;
int i;
for (i=0;i<strlen(data);i++)
{
line[i]=data[i];
}
line[i++]='.';
line[i++]='t';
line[i++]='x';
line[i++]='t';
line[i]='[=10=]';
myfile.open(line,ios::out); //To read from file using object myfile.
if(myfile.is_open())
{
myfile<<"data meaning"<<endl;
myfile.close();
myfile.open(line,ios::app);
myfile<<data<<meaning;
root=insert(root,data,meaning);//Insert new node in tree.
myfile.close();
}
else
cout<<"Unable to open file"<<endl;
}
我应该做哪些改变?
我认为您的数据(单词)中可能包含一个 endl 字符。仔细检查您是否删除了任何空格(从单词及其含义中)。
编辑:根据 stefaanv,它的意思是有 endl(在开头)。当您使用 cin.getline() 读取输入时。也许使用 cin << stream 对你来说可能是更好的选择。
STDIN(标准输入)被缓冲并且
cin >> i;
在缓冲区中留下'\n'。
您要么必须在使用 getline 再次读取之前刷新缓冲区,例如:
cin.clear();
fflush(标准输入);
更多的看这个问题How do I clear the cin buffer in C++。
或者读取数据时可以使用getline
cin.getline(数据,10);
这样您就不必在想要阅读含义时刷新标准输入缓冲区。
我正在编写代码来使用 avl 平衡树结构和文件处理来制作字典。用户输入单词及其含义。单词存储在树的节点中,单词及其含义存储在文本文件中。 当用户输入单词及其含义时,它应该存储在文件中:
单词“选项卡”的含义
但是单词和意思写在不同的两行上。 以下是我的代码:
#include <iostream>
#include<fstream>
#include<string.h>
using namespace std;
class node //Create a class for node.
{ public:
char keyword[10];
char meaning[100];
node *lc;
node *rc;
int h;
friend class avl;
};
class avl //Create a class for avl.
{public:
node* root;
avl()
{
root=NULL; //Initialise root to NULL.
}
node *insert(node *root,char[],char[]);
void insert1();
int height(node *);
int bal_fac(node*);
node *LL(node*);
node *LR(node*);
node *RL(node*);
node *RR(node*);
};
void avl:: insert1() //Insert1 function to read file contents.
{
char data[10]=" ";
char meaning[100];
cout<<endl<<"Enter word: ";
cin>>data;
int len=strlen(data);
len+=4;
char line[len];
cout<<endl<<"Enter its meaning: ";
cin.getline(meaning,100,'.');
fstream myfile;
int i;
for (i=0;i<strlen(data);i++)
{
line[i]=data[i];
}
line[i++]='.';
line[i++]='t';
line[i++]='x';
line[i++]='t';
line[i]='[=10=]';
myfile.open(line,ios::out); //To read from file using object myfile.
if(myfile.is_open())
{
myfile<<"data meaning"<<endl;
myfile.close();
myfile.open(line,ios::app);
myfile<<data<<meaning;
root=insert(root,data,meaning);//Insert new node in tree.
myfile.close();
}
else
cout<<"Unable to open file"<<endl;
}
我应该做哪些改变?
我认为您的数据(单词)中可能包含一个 endl 字符。仔细检查您是否删除了任何空格(从单词及其含义中)。
编辑:根据 stefaanv,它的意思是有 endl(在开头)。当您使用 cin.getline() 读取输入时。也许使用 cin << stream 对你来说可能是更好的选择。
STDIN(标准输入)被缓冲并且
cin >> i;
在缓冲区中留下'\n'。 您要么必须在使用 getline 再次读取之前刷新缓冲区,例如:
cin.clear(); fflush(标准输入);
更多的看这个问题How do I clear the cin buffer in C++。
或者读取数据时可以使用getline
cin.getline(数据,10);
这样您就不必在想要阅读含义时刷新标准输入缓冲区。