Работа с файлами: по фамилии абонента выдать номер телефона - 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, если все действия выполнены корректно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д