Работа с файлами: по фамилии абонента выдать номер телефона - 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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и строками.
  2. Объявление структуры abonent для хранения данных об абонентах.
  3. Открытие файла abonents.txt в режиме добавления +a и проверки его открытия на ошибки.
  4. Ввод данных о N абонентах с помощью пользовательского ввода и сохранение их в структуру abonent.
  5. Запись данных об абонентах в файл abonents.txt.
  6. Ввод номера телефона, который необходимо найти.
  7. Перемещение указателя чтения файла в начало файла.
  8. Чтение данных из файла abonents.txt и сравнение номера телефона с введенным номером.
  9. Вывод на экран имени абонента, если номер телефона совпадает.
  10. Закрытие файла после выполнения всех операций.
  11. Возврат 0, если все действия выполнены корректно.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы