Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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/0/drupal/3.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
从文件中读取字符串,直到得到'\n';c/c+中的字符或EOF+;_C_File Handling - Fatal编程技术网

从文件中读取字符串,直到得到'\n';c/c+中的字符或EOF+;

从文件中读取字符串,直到得到'\n';c/c+中的字符或EOF+;,c,file-handling,C,File Handling,我想打开两个文件并将这些字符串保存到第三个文件中,第一个文件中有这些字符串,但第二个文件中没有。 为此,我必须逐行读取字符串(即,直到到达下一行字符)。 但是对于文件的最后一行,我没有'\n',因为有EOF。因此,请帮助我读取文件的所有字符串,然后将其存储在字符数组中 代码:- #include<stdio.h> #include<string.h> int main() { FILE *f1ptr,*f2ptr,*f3ptr; f1ptr=fopen("1stfile.

我想打开两个文件并将这些字符串保存到第三个文件中,第一个文件中有这些字符串,但第二个文件中没有。 为此,我必须逐行读取字符串(即,直到到达下一行字符)。 但是对于文件的最后一行,我没有'\n',因为有EOF。因此,请帮助我读取文件的所有字符串,然后将其存储在字符数组中

代码:-

#include<stdio.h>
#include<string.h>
int main()
{
FILE *f1ptr,*f2ptr,*f3ptr;
f1ptr=fopen("1stfile.txt","r");
f3ptr=fopen("3rdfile.txt","w");
char arr1[100],arr2[100];
while(fscanf(f1ptr," %[^\n]",arr1)!=EOF)    
    {
    f2ptr=fopen("2ndfile.txt","r");
    int flag=1;
    while(fscanf(f2ptr," %[^\n]",arr2)!=EOF)
        {
        if(strcmp(arr1,arr2) ==0)
            {
            flag=0;//flag=0 means i will not store this string into file
            }
        }
    fclose(f2ptr);
    if(flag)
        fprintf(f3ptr,"%s\n",arr1);
    }
return 0;
}
第二个文件

 Minimum Points To Reach Destination
 Maximum Index
 Maximum of minimum for every window size
 Find Prime numbers in a range
 Largest Number formed from an Array
 Find sum of different corresponding bits for all pairs
 Rearrange an array with O(1) extra space
 Return two prime numbers
 Sorting Elements of an Array by Frequency 
 A Simple Fraction 
 QuickSort on Doubly Linked List
 Reorder List
 Binary Tree to DLL
 Tree from Postorder and Inorder
 Maximum Index
 Find Prime numbers in a range
 Rearrange an array with O(1) extra space
 Return two prime numbers
 Sorting Elements of an Array by Frequency

以下方法可能有效。如果使用fgets,最后一行将是add'\n'

#include<stdio.h>
#include<string.h>
//using namespace std;
int main()
{
    FILE *f1ptr,*f2ptr,*f3ptr;
    f1ptr=fopen("1stfile.txt","r");
    f3ptr=fopen("3rdfile.txt","w");
    char arr1[100],arr2[100];

    while (fgets(arr1, 100, f1ptr) != NULL) {
        f2ptr=fopen("2ndfile.txt","r");
        int flag=1;
        while (fgets(arr2, 100, f2ptr)!=NULL) {
            if (strcmp(arr1,arr2) ==0) {
                flag=0;  //flag=0 means i will not store this string into file   
            }
        }
        fclose(f2ptr);
        if (flag)
            fprintf(f3ptr,"%s",arr1);
    }

    return 0;
}
#包括
#包括
//使用名称空间std;
int main()
{
文件*f1ptr,*f2ptr,*f3ptr;
f1ptr=fopen(“1stfile.txt”,“r”);
f3ptr=fopen(“3rdfile.txt”,“w”);
字符arr1[100],arr2[100];
while(fgets(arr1100,f1ptr)!=NULL){
f2ptr=fopen(“2ndfile.txt”,“r”);
int标志=1;
while(fgets(arr2100,f2ptr)!=NULL){
if(strcmp(arr1,arr2)==0){
flag=0;//flag=0表示我不会将此字符串存储到文件中
}
}
fclose(f2ptr);
国际单项体育联合会(旗)
fprintf(f3ptr,“%s”,arr1);
}
返回0;
}

这里有一个使用
倒带()的解决方案。

如果您执行
manfgets
,下面是描述的一部分:
fgets()
从流中最多读入一个小于大小的字符,并将它们存储到s指向的缓冲区中。EOF或换行符后,读取停止。如果新行被读取,它将被存储到缓冲区中。在缓冲区中最后一个字符之后存储一个终止的空字节(
'\0'


因此,新行字符被添加到字符串中,而不是EOF。

fopen()和第二个文件的fclose()应该被添加一次。使用rewind()将文件光标移动到顶部。始终检查fopen()是否成功。请提供输入示例和预期输出。为什么不读取第二个文件并将字符串放入双字符数组中:char arr2[100][100];100行就足够了吗?@Nishantsharma 1。将其中一个文件读入内存,这很简单。2.如果你更勇敢一点,你可以对内存中的行进行排序,并进行二进制搜索,而不是线性搜索。或者直接将文件读入二叉树;但是,如果文件中的行已经排序,那么这个解决方案就不好了,您需要一个更难编码的平衡二叉树。
f1ptr=fopen("1stfile.txt","r");
//Check f1ptr is not NULL.
f2ptr=fopen("2ndfile.txt","r");
//Check f2ptr is not NULL.
f3ptr=fopen("3rdfile.txt","w");
//Check f3ptr is not NULL.
char arr1[100],arr2[100];

while(fgets(arr1, sizeof arr1, f1ptr) )   
{
    int flag=1;
    rewind(f2ptr);  //Moves file pointer to the top.
    while(fgets(arr2,sizeof arr2, f2ptr))
    {
        if(strcmp(arr1,arr2) ==0)
        {
           flag=0;//flag=0 means i will not store this string into file
           break;  //Break out of the loop if 2 files have the same line.
        }
    }
    if(flag)
       fprintf(f3ptr,"%s",arr1);  //No need to print newline. Its already there.
  }
  fclose(f1ptr);
  fclose(f2ptr);
  fclose(f3ptr);