好的,现在我正在使用filestream在turbo c / DOSBOX中尝试一个非常基本的程序。我注意到的是我的ofstream变量在将数据写入文件时正常工作,但问题在于检索数据。由于某种原因,ifstream变量无法正常工作,或者此处用于检索文件数据的方法可能不正确。如果您可以帮我解决这个问题,请与我联系。
这是我的代码: -
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<fstream.h>
void main()
{
char user[20],pin[10];
ofstream fout("TEMP");
ifstream fin("TEMP");
clrscr();
fin>>user;
cout<<"Username : "<<user;
cout<<"\nEnter username.\n";
gets(user);
cout<<"Enter pin.\n";
cin>>pin;
fout<<"Username : "<<user<<endl<<"Pin : "<<pin;
cout<<"\nUsername : "<<user;
getch();
}
我输入的数据是: 用户名= dragonis。 pin = 123。
所有内容都完美地存储在文件中。但是在检索时,在程序开始时给出cout时没有用户名输出。它是空白的。
答案 0 :(得分:0)
这里的问题很可能是您同时打开同一个文件两次。这几乎肯定会失败,将fin
置于错误状态并导致您的提取失败而不做任何事情。
目前还不清楚你在这里想要完成什么 - 目前你只从文件中读取一个单词(你显示然后丢弃的用户名),然后你写了不同的数据格式,希望覆盖旧数据。但是,如果这实际上是您尝试做的事情,那么您应该使fin
和fout
的生命周期不重叠,以便在重新打开之前关闭文件:
char user[20],pin[10];
{
ifstream fin("TEMP");
clrscr();
fin>>user;
cout<<"Username : "<<user;
cout<<"\nEnter username.\n";
gets(user);
cout<<"Enter pin.\n";
cin>>pin;
}
{
ofstream fout("TEMP");
fout<<"Username : "<<user<<endl<<"Pin : "<<pin;
cout<<"\nUsername : "<<user;
}
由于局部变量在超出范围时被销毁,因此可以保证在重新打开文档之前关闭文件进行读取。
您也可以将其打开为fstream
,它同时支持输入和输出,但我感觉您已经没有做过您正在尝试做的事情,所以我认为保持输入和输出分开将是最好的。