繁体   English   中英

用c ++写入文件

[英]c++ writing into a file

我正在编写代码,以使用avl平衡树结构和文件处理来制作字典。 用户输入单词及其含义。 单词存储在树的节点中,单词及其含义存储在文本文件中。 当用户输入单词及其含义时,应将其存储为:

单词“ tab”的含义

但是单词和含义在两行中写成。 以下是我的代码:

#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]='\0';

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 <<流对您来说可能是一个更好的选择。

STDIN(标准输入)被缓冲并

cin >> i;

在缓冲区中保留“ \\ n”。 您要么必须先刷新缓冲区,然后再使用getline再次读取它,例如:

cin.clear(); fflush(标准输入);

有关更多信息,请参见此问题。 如何清除C ++中的cin缓冲区

或者您可以在读取数据时使用getline

cin.getline(数据,10);

这样,您在要读取含义时就不必刷新标准输入缓冲区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM