如何存储除所选行之外的其余行?
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;
}
在此代码中,我试图跳过一行。这意味着所有行都应该存储在数组中,除了从输入身份证号码中获取的行。
例如。如果我输入了第一个的 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;
}