Prv*_*dav -1 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];
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);
}
Run Code Online (Sandbox Code Playgroud)
这里是我喜欢读取输入字符串并将其写入文件的上述程序,前提是字符串不存在于文件中.
在读取模式下打开文件.
如果第一次输入文件不存在,如果文件指针返回NULL,则创建一个文件写入模式并写入输入的字符串.
但它不能正常工作..
strcmp没有正确执行....与重复条目也没有进入"duplicae found"的循环.
如果有人可以提供帮助,请
的fgets:
fgets(line,100,f);
Run Code Online (Sandbox Code Playgroud)
从中消耗换行符f并将其存储在中line.但s不包含换行符.因此,strcmp返回非零数字,因为字符串(s和f)是不同的.
使用删除换行符
line[strcspn(line, "\n")] = '\0';
Run Code Online (Sandbox Code Playgroud)
就在这之后fgets.该strcspn功能,在你的情况下,返回的字符数,直到\n在line.如果\n未找到line,则返回字符串line(strlen(line))的长度.
while ( !feof (file) )总是错的?.更换
while(!feof(f))
Run Code Online (Sandbox Code Playgroud)
同
while(fgets(line,100,f)) //Same as `while(fgets(line,100,f) != NULL)`
Run Code Online (Sandbox Code Playgroud)
并且不要忘记fgets从循环体中删除以解决此问题.
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |