Я могу искать файл произвольного доступа без каких-либо проблем, но проблема в том, что я не понимаю, как он на самом деле работает.
Ранее я искал файл произвольного доступа, используя метод
FILE fpnt = fopen(FILE_NAME, "rb+");
User tempUser = {"", "", 0, "", 0};
printf("Enter the id number of the user to find\n");
scanf("%d", idNum);
fseek(fpnt, (idNum - )* sizeof(User), SEEK_SET);
fread(&tempUser, sizeof(User), 1, fpnt) != EOF && found == 0;
Я не понимаю, как это всегда находит правильного пользователя, когда смещение не всегда обязательно совпадает сID я бы предположил.Но проблема заключается в том, когда я пытаюсь получить доступ к файлам, используя данные, отличные от целых чисел.
например, я пытаюсь найти пользователей по их именам, которые являются строками.метод, который я использую, следующий:
typedef enum tUserLevel {
MANAGER = 1,
CLERK = 0,
NOTFOUND = 9001
}level;
typedef struct tUser {
char userName[20];
char password[20];
level priviledgeLevel;
}User;
do {
fseek(fpnt, offSet * sizeof(User), SEEK_SET);
if (fread(&tempUser, sizeof(User), 1, fpnt) == EOF)
endOfFile = EOF;
rewind(fpnt);
offSet++;
} while (endOfFile!=EOF && !strcmp(username, tempUser.userName));
if (endOfFile==EOF&& strcmp(username, tempUser.userName)) {
printf("The User was not found\n");
return noUser;
//return noUser;
}
Итак, что должно произойти, так это то, что файл проверит каждого пользователя на введенное имя пользователя (это переменная с именем username), сравнит их и остановит, если обаправильный.Я не уверен, как это на самом деле зацикливается, или если смещение влияет на указатель в файле так, как я хочу.Что происходит, я всегда получаю EOF, так что часть кода всегда выполняется даже после одного чтения.У меня было 4 тестовых пользователя. Есть ли лучший способ поиска этих файлов по строке, чтобы я мог их прочитать и отредактировать в файле, или это лучший способ, и я что-то напутал?