Работа с файлами: по фамилии абонента выдать номер телефона - C (СИ)
Формулировка задачи:
Добрый вечер. Есть несколько вопросов по поводу работы с файлами, надеюсь вы поможете разобраться)
Вот, собственно, условие задачи.
Создать файл, содержащий сведения о телефонах абонентов. Каждая запись содержит поля: фамилия абонента, год установки телефона, номер телефона. Количество записей произвольное. Написать программу, выводящую на экран следующую информацию:
- по фамилии абонента выдаётся номер телефона;
- определяется количество установленных телефонов с XXXX года.
Вот код, того, что я сделал
Так же есть текстовый файл
Вопрос вот в чем, как взаимодействовать с определенными данными в строке?( в моем случае, фамилия=номер)
#include <conio.h>
#include <stdio.h>
#include<locale.h>
FILE* myf;
int main ()
{
setlocale(LC_ALL, "Russian");
char name[10];
int year;
int number;
myf = fopen ("mobile.txt", "r+a");
if (!myf) {
printf ("Файл не найден!\n");
return 1;
}
printf("Введите фамилию абонента\n");
scanf("%s",name[10] );
while (!feof(myf)) {
// я знаю про такую функцию, как fgets, но, как я понимаю
// она взаимодействует только с целой строкой,
// не разделяя записанные значения на элементы
}
}Решение задачи: «Работа с файлами: по фамилии абонента выдать номер телефона»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
#define MAX 40
struct abonent
{
char name[MAX];
int year;
char number[MAX];
};
int main()
{
struct abonent primer;
FILE *pab;
char buff[MAX];
int flag = 0;
if(!(pab = fopen("abonents.txt", "a+b"))){
fputs("Can not open file abonents.txt\n", stderr);
exit(1);
}
for(int i = 0; i < N; i++){
puts("Enter name:");
scanf("%s", primer.name);
puts("Enter year:");
scanf("%d", &primer.year);
while(getchar() != '\n');
puts("Enter number:");
scanf("%s", primer.number);
fprintf(pab, "%s %d %s\n", primer.name, primer.year, primer.number);
}
puts("Enter phone number:");
scanf("%s", buff);
rewind(pab);
while(3 == fscanf(pab, "%s%d%s", primer.name, &primer.year, primer.number)){
if(!strcmp(primer.number, buff)){
printf("%s\n", primer.name);
flag = 1;
}
}
if(!flag)
puts("Number not found");
fclose(pab);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками.
- Объявление структуры
abonentдля хранения данных об абонентах. - Открытие файла
abonents.txtв режиме добавления+aи проверки его открытия на ошибки. - Ввод данных о N абонентах с помощью пользовательского ввода и сохранение их в структуру
abonent. - Запись данных об абонентах в файл
abonents.txt. - Ввод номера телефона, который необходимо найти.
- Перемещение указателя чтения файла в начало файла.
- Чтение данных из файла
abonents.txtи сравнение номера телефона с введенным номером. - Вывод на экран имени абонента, если номер телефона совпадает.
- Закрытие файла после выполнения всех операций.
- Возврат 0, если все действия выполнены корректно.