从turbo c ++中的二进制文件读取后出现意外输出

时间:2015-08-28 19:45:35

标签: c++ file-io binaryfiles file-handling turbo-c++

在我阅读文件后写入文件后,我得到了意想不到的输出 我写的代码是:

#include<fstream.h>
#include<conio.h>
#include<string.h>

struct test
{
    char que[100];
    char ans[20];
};

int main()
{
    test s, d;
    clrscr();
    ofstream out("test.dat", ios::binary | ios::app);
    ifstream in("test.dat", ios::binary | ios::in);
    strcpy(s.que, "2.How many ways the letters of the word abas be arranged to  form words with or without meaning");
    strcpy(s.ans, "180");
    out.write((char*) &s, sizeof(test));

    while(!in.eof())
    {
        in.getline((char*) &d, sizeof(test));
        cout << d.que << '\n' << d.ans;
    }

    getch();
    return 0;
}

我得到的输出是:

2.How many ways the letters of the word abas be arranged to form words with or w
ithout meaning
180
180

这是我与之相处的一些任意字符的输出。

我做错了什么?为什么我在s.ans中存储的字符串也会写入s.que

1 个答案:

答案 0 :(得分:0)

我通过以下更改来实现此目的:

  1. 写入文件后添加out.close()以刷新输出缓冲区。
  2. getline替换为read,以检索write写入的字节。 getline可能会在某些条件下给出不同的结果。
  3. 将read语句移至while条件:

    while(in.read((char *) &d, sizeof(test)))

  4. 在循环体in.eof()中的read语句在读取最后一个test对象后不会立即返回true,因此循环将最后一次执行。