Я создаю код, который постоянно читает ввод с клавиатуры и сравнивает его с текстовым файлом, содержащим имена пользователей. каждая строка в текстовом файле содержит только одно имя. Программа определяет, совпадает ли введенный текст с именами пользователей в строке.
Я знаю, как это сделать, используя циклы. но я не хочу, чтобы цикл проходил весь файл каждый раз. Я хочу, чтобы код исключал случаи, когда он уже обнаруживал ввод с первого раза.
например, если вводится впервые Ben
, а текстовый файл -
Ben
Tom
Albert
Alex
Я хочу, чтобы программа в первый раз зациклилась и обнаружила соответствующий текст. но во второй раз, если вход отличается, например. Alex
тогда программа только начинает цикл со второй строки и исключает первую строку из цикла.
Вот мой код в основной функции
FILE * fp;
char Line[150];
char user[150];
printf("enter name: ");
fgets(user,150, stdin);
fp = fopen ("users.txt", "r");
if(fp == NULL)
{
perror("Error.. ");
exit(EXIT_FAILURE);
}
int line_start;
while(!feof(fp))
{
fgets(Line, 150, fp);
if (feof(fp))
break;
int store_start[150];
long store_end[150];
int i=0;
if (strcmp(user, Line) == 0)
{
//printf("%s\n", "match found");
fseek(fp, 0, SEEK_CUR);
long line_end = ftell(fp);
line_start = line_end - strlen(Line);
store_start[i]=line_start;
store_end[i]=line_end;
printf("%s\n", "match found")
for (int i = 0; i < 150; ++i)
{
if (line_start==store_start[i] && line_end==store_end[i])
{
//skipp reading
fseek(fp, 1, SEEK_CUR);
printf("%ld\n",ftell(fp) );
}
}
printf("start is %d end is %ld \n", store_start[i],store_end[i]);
}
i++;
}
Мой подход заключается вобнаружить первое вхождение слова и если совпадение произойдет. хранит индекс начала строки в массиве store_start[150]
и окончание строки в другом массиве store_end[150]
, для которого произошло совпадение, и в следующий раз прочитает каждую вещь передначальный индекс и после последнего предложения строки.
Проблема в том, что я не знаю, что поместить в этот цикл Этот цикл в основном проверяет, попадает ли цикл в ту же строкукоторый он читал ранее в любом из предыдущих циклов.
if (line_start==store_start[i] && line_end==store_end[i])
{
//skipp reading
fseek(fp, 1, SEEK_CUR);
printf("%ld\n",ftell(fp) );
}
Я хочу, чтобы код пропускал чтение этой строки и переходил к следующей строке.