如何存储除所选行之外的其余行?

How to store the remaining lines excepted the choosen one?

在此代码中,我试图跳过一行。这意味着所有行都应该存储在数组中,除了从输入身份证号码中获取的行。

例如。如果我输入了第一个的 ID card number 那么这一行应该被忽略并且剩余的行应该存储在一个数组中。或者,如果我输入了第二行,那么第二行应该被忽略,其余的行应该保存在数组中。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
  char fname[50] = "fiile.csv", toFind[50], str[200];
  FILE * fp1 = fopen(fname, "r+");
  char * line1 = NULL;
  char array[2][200];

  printf("Enter your id card number: ");
  scanf("%s", toFind);

  int count = 0;
  while(fgets(str, 200, fp1)){
    line1 = strtok(str, "\n");
    if(line1){
      count++;
      if(count == 1 && strstr(line1, toFind)){
        strcpy(array[0], line1);
        printf("Here is line %d: %s\n", count, array[0]);
      }
      else if(count == 2 && strstr(line1, toFind)){  
        strcpy(array[1], line1); 
        printf("Here is line %d: %s\n", count, array[1]); 
      }
    } 
  }
  return 0;
}

用您需要能够存储的尽可能多的元素声明数组(如果您不知道最大值,您需要使用 malloc()realloc() 的动态分配,但我不会在这个答案中展示这一点。

然后使用一个索引变量来保存您要保存到的当前位置,当您跳过一行时您不会递增。复制时使用此索引变量,而不是 hard-coding 每个索引。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLINES 1000

int main(){
    char fname[50] = "file.csv", toFind[50], str[200], array[MAXLINES][200];
    FILE * fp1 = fopen(fname, "r+");
    char * line1 = NULL;

    printf("Enter your id card number: ");
    scanf("%s", toFind);

    int index = 0;
    while(index < MAXLINES && fgets(str, 200, fp1)){
        line1 = strtok(str, "\n");
        if(line1)
        {
            if (!strstr(line1, toFind)) {
                strcpy(array[index], line1);
                printf("Here is line %d: %s\n", index, line1);
                index++;
            }
        }
    }
    return 0;
}