C++ 逐行读取文件时读取和写入文件
节目:C++ 逐行读取文件时读取和写入文件,c++,c,string,file-io,char,C++,C,String,File Io,Char,节目: #include<iostream> #include<fstream> #include<stdio.h> #include<string.h> using namespace std; int main() { FILE *f; char* line; size_t ln=100; char* s; line=new char[100]; s=new char[100]; cou
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
FILE *f;
char* line;
size_t ln=100;
char* s;
line=new char[100];
s=new char[100];
cout<<"input key"<<endl;
cin>>s;
f=fopen("parvin.txt","r");
if(f==NULL)
{
cout<<" no file TO read so creating for writing "<<endl;
//return 0;
f=fopen("parvin.txt","w");
fputs(s,f);
fputc('\n',f);
}
else
{
while(! feof(f))
{
fgets(line,100,f);
cout<<line<<endl;
//if(!strncmp(line,s,strlen(line)-1))
if(strcmp(line,s)== 0 )
{
cout<<"duplicate found"<<endl;
fclose(f);
return 0;
}
}
fclose(f);
f=fopen("parvin.txt","a+");
fputs(s,f);
fputc('\n',f);
}
fclose(f);
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
文件*f;
字符*行;
尺寸ln=100;
char*s;
行=新字符[100];
s=新字符[100];
可以的fgets
:
fgets(line,100,f);
使用f
中的换行符并将其存储在line
中。但是s
不包含换行符。因此,strcmp
返回一个非零数字,因为字符串(s
和f
)不同
使用以下命令剥离换行符:
line[strcspn(line, "\n")] = '\0';
就在fgets
之后,strcspn
函数在您的例子中返回\n
在行中的\n
之前的字符数。如果在行中未找到\n
,则返回字符串行的长度(strlen(行)
)。
另外,阅读。替换
while(!feof(f))
与
不要忘记从循环体中删除fgets以解决此问题。使用
虽然(FGET(行,100,f)!= null)你不应该使用C和C++方法,像这样。选择一个并坚持它…我知道,但是在“C”中。Primtf和Sncf我不喜欢使用它们。格式指定器……只针对CIN和CUT我使用C++ LIB。在原始代码中,我只使用C或用C++标准库替换整个C丑。使用C++,如何做同样的操作?我不太清楚文件的C+库。IO@Cool盖伊:谢谢:)@PrvnYadav,我不知道多少H+C++,但我认为它是通过<代码> FStruts或流> /CU> > CIN < /Cord>获取输入。@ PRVNYADV这里是一个概述基本问题的页面,问题是在与输入字符串比较时,每行中的新行字符。
while(fgets(line,100,f)) //Same as `while(fgets(line,100,f) != NULL)`