一个文件的问题???需要大家帮我!!!
我写了一个小题,是实现把输入的人名写入一个文本,然后从中找到一个输入人的名.
当找到时可以处理,但是当没有找到时就不知道怎么处理了,不知道怎么判断文件结束,即:何时文件指针移到文件结束,查找结束.我的题市是这样写的:
void seek( char* const p){
FILE* fp;
if((fp=fopen("d:\\vc++\\whz.txt","r+t"))){
fseek(fp,4,0);
char returnchar[20];
char constchar[20];
while(1){
strcpy(returnchar,fgets(constchar,20,fp));
*(returnchar+(strlen(returnchar)-1))='\0';
if(!strcmp(p,returnchar)){
cout<<returnchar<<endl<<p<<endl;
cout<<"找到要找的人!!!\n";
fclose(fp);
return;
}
fseek(fp,16,1);
if(feof(fp)){ //就是着这里不知道怎么处理了
fclose(fp); //当文件指针移过结尾时也没有办法知道
//是我的写错了吗????
cout<<"没有找到要找的人!!!\n";
}
}
}
else{
cout<<"没有成功打开文件!!!\n";
}
}
问题点数:0、回复次数:5Top
1 楼pomelowu(羽战士)回复于 2004-12-03 12:34:17 得分 0
while(1){
strcpy(returnchar,fgets(constchar,20,fp));
*(returnchar+(strlen(returnchar)-1))='\0';
if(!strcmp(p,returnchar)){
cout<<returnchar<<endl<<p<<endl;
cout<<"找到要找的人!!!\n";
fclose(fp);
return;
}
fseek(fp,16,1);
if(feof(fp)){
fclose(fp);
cout<<"没有找到要找的人!!!\n";
break;
}
Top
2 楼koalapheonix()回复于 2004-12-05 10:56:20 得分 0
没什么办法
一行一行读进char*中
然后按照你定义的格式来依次得到需要的数据
读文件的方法很多种 这个还算好用
/*
ifstream() 构造一个对象
ifstream( const char*, int, int ) 指定打开文件的对象
ifstream( filedesc )
ifstream( filedesc, char*, int )
*/
/*
获取行输入的方法:
ifstream::get or ifstream::getline()每次取一行或者取你指定的终止符号的内容(第三个默认参数'10'也就是'\n') ----- 如果你要到\0结束则设置这个参数为'\0'一次读到终止符为止下次继续
get() 遇到终止符即停止,如果用流读文件一行保存一行覆盖一行
getline 取得终止符 但不保存到缓冲中
get():
ifstream iPut("MM.ini");
ofstream Out("WW.ini");
while( iPut.get( Buf, 100 ) )
{
iPut.get( );
cout<<i++<<":"<<Buf<<endl; //结束清空缓存
}
getline():
ifstream iiPut("MM.ini");
while(iiPut.getline( Buf, 100 )) //是不会讲\n插入到缓冲中只会加'0'作为结束
{
char* cp = Buf;
while( *cp != 0 )
cp++;
cp++;
cout<<cp<<endl; //遇到结束标志0也终止输出
Top
3 楼koalapheonix()回复于 2004-12-05 10:56:40 得分 0
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct
{
char name[20];
int mark;
long No;
}student[100];
int main()
{
ifstream inf("fileName", ios_base::in);
if (inf.fail())
{
exit(-1);
}
int i = 0;
while (!inf.eof())
{
string str;
inf >> str;
char *pName = student[i].name;
char *pStr = const_cast<char*>(str.c_str());
while ((*pName++ = *pStr++) != '\0');
inf >> student[i].mark >> student[i].No;
++i;
}
return 0;
}
Top
4 楼koalapheonix()回复于 2004-12-05 10:57:07 得分 0
不知道上面两个能不能帮你的了Top
5 楼danlansky(忧郁蓝色)回复于 2004-12-05 13:49:17 得分 0
为什么要移位置指针呢,一行一行读应该没有问题呀?
楼主代码中有两处移位置指针了:
fseek(fp,4,0); -----文件首4个字节处
fseek(fp,16,1);-----当前位置后16个字节处???Top




