Я пытаюсь создать телефонную книгу, которая имеет пять функций в c. Я создал только первую функцию, которая берет и сохраняет в знаниях людей файла. Тем не менее, я не могу выполнить вторую функцию, которая ищет только знания человека (не всех) из файла.Как читать данные из файла?
Для запуска этой функции ("" функция display() "") Я хочу, чтобы имя пользователя было выполнено для поиска и отображения знаний этого имени на экране. Я что-то написал, но это не сработало. Проблема заключается в функции display(). Как я могу прочитать только одну строку и распечатать ее на экране? Заранее спасибо.
#include <stdio.h>
#include <stdlib.h> // "stdlib" library contains of exit() and malloc function
#include <Windows.h> // "Windows" library contains of Sleep() function
#include <string.h> // "string" library contains of strcmp() function
struct personKnowledge
{
char number[16];
char name[16];
char surname[16];
};
void newRecord();
void display();
void deletE();
void add();
void update();
FILE *ptrFILE;
int main()
{
int choice;
printf("\n\t\t *-* Phone Book Program *-*");
do
{
printf("\n\n\t\t 1) New record"); // The options are being presented to user
printf("\n\n\t\t 2) Display person knowledge");
printf("\n\n\t\t 3) Delete someone");
printf("\n\n\t\t 4) Add new person");
printf("\n\n\t\t 5) Update person knowledge");
printf("\n\n\t\t 6) Exit");
printf("\n\n\nEnter your choice: ");
scanf("%d", &choice);
switch (choice)
{
case 1:
{
newRecord();
break;
}
case 2:
{
display();
break;
}
case 3:
{
break;
}
case 4:
{
break;
}
case 5:
{
break;
}
case 6:
{
printf("\nWorking has been completed.\n");
exit(0);
break;
}
default:
{
printf("\nWrong entry! The program has been terminated.\n");
}
}
} while (choice >=1 && choice <=6);
return 0;
}
void newRecord()
{
system("cls"); // Screen is being cleaned
if ((ptrFILE = fopen("Phone Book.txt", "w")) == NULL)
{
printf("The file couldn't open\n");
}
else
{
struct personKnowledge *p; // p means person
p = (struct personKnowledge *)malloc(sizeof(struct personKnowledge)); // Memory is being allocated
fflush(stdin);
printf("\n\nDetermine person name: "); // User is entering the person's knowledge and they are being saved in file
gets(p->name);
printf("Determine %s's surname: ", p->name);
gets(p->surname);
printf("Determine %s's number: ", p->name);
gets(p->number);
fprintf(ptrFILE, "Name\t\t\t\tSurname\t\t\t\t\tNumber\n");
fprintf(ptrFILE, "--------\t\t ----------------\t\t\t---------------------\n");
fprintf(ptrFILE, "\n%s%33s%38s\n", p->name, p->surname, p->number);
fclose(ptrFILE);
free(p);
printf("Please wait, information is saving to file..\n");
Sleep(1000);
printf("*-* Saving operation has been completed. *-*");
}
fclose(ptrFILE);
}
void display()
{
struct personKnowledge *s; // s means searching
char name[16];
if ((ptrFILE = fopen("Phone Book.txt", "r")) == NULL)
{
printf("The file couldn't open\n");
}
else
{
fseek(ptrFILE, 0L, SEEK_SET);
printf("Express name which you search: ");
gets(s->name);
while (!feof == NULL)
{
fscanf(ptrFILE,"%s", &name);
if (strcmp(s->name, name) == 0)
{
printf("qawsdsdf");
}
}
}
fclose(ptrFILE);
}
Вы, вероятно, нужно 'FOPEN («Телефон Book.txt»,«а»)', если вы хотите добавить запись в существующий файл. Обратите внимание на '' a '' вместо '' w '', который уничтожит существующий файл. –
Я вижу, что вы используете страшный 'feof()', пожалуйста, прочитайте страницу руководства, так как ваше использование не удастся, также http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always- неправильно. Лучше использовать 'while (fgets (...)! = NULL)' и вырезать трейлинг-строки. –
'if (s-> name == name)' неверно, он сравнивает указатели. Вам нужно 'if (strcmp (s> name, name) == 0)' для сравнения содержимого строки. Я подозреваю, что я найду еще много ошибок, если буду смотреть дальше. –