我用c++对文件写入为什么没有任何操作

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:22:13
#include "iostream"
#include "string"
#include "fstream"
using namespace std;
void main()
{
fstream file("d://student.txt");
int i=0;
string mes1,mes;
char p[100],*q="**";
cin>>p;
while(/*!file.eof()&&*/file.good())
{
file>>mes1;
if(mes1 == p)
{
i++;
file.peek();
file.put('*');
cout<<"替换一次成功!"<<endl;
}
}
cout<<i;

哪位高手帮我找找问题出在哪啊?
而且如果我把while循环改为如下
while(/*!file.eof()&&*/file.good())
{
file>>mes1;
file.put('*');
if(mes1 == p)
{
i++;

cout<<"替换一次成功!"<<endl;
}
}
整个程序就会不停的写入,貌似if条件根本没有执行,哪位大侠帮帮忙啊

void __fastcall TfrmMain::SaveLog(String &str) //记录日志
{
FILE *fp; //建立文件
fp = fopen("GameLog.txt","a"); //打开文件
str = "用户 " +UserData->UserName + " "+str +" "+ Now()+"\r\n";
fputs(str.c_str(),fp); //写入文件
fclose(fp); //关闭文件
SaveLogThread *st = new SaveLogThread(false); //这句没用是我自己线程发消息用的。
}

替换这种工作对流来说是比较麻烦的

在写入模式和读取模式切换的时候需要确定文件指针的位置

peek是预览一下下一个字符,所以你用在此处是不正确的

int pos=0;
while(/*!file.eof()&&*/file.good())
{
pos = file.tellg();
file>>mes1;

if(mes1 == p)
{
i++;
file.seekp(pos);
file<<"*";
cout<<"替换一次成功!"<<endl;
}
}

你用这个代码实验一下就知道了

发现一个问题
peek没有提取任何一个字符的副本
用file >> mes1;之后,用peek,读取到的只是紧接这个字符串之后的转义字符,要想替换找到的字符串应该返回该字符串的首位置。