Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 逐行读取文件时读取和写入文件_C++_C_String_File Io_Char - Fatal编程技术网

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)`