Поиск и запись данных из одного файла в другой - PullRequest
2 голосов
/ 05 мая 2020

Мне нужно написать программу C для извлечения данных из одного файла и записи их в другой файл без использования пользовательских функций. Мои требования:

  • Поиск сведений о клиенте по имени.
  • Сохранение данных транзакции (оплаченная сумма) в другом текстовом файле.

Я сделал код для поиска по имени. Но он не работает,

#include <stdio.h>
#include <stdlib.h>

int main () {
   char name[10], nic[10], mobile[10];
   char fname[10], fnic[10], fmobile[10];
   char choice;
   int amount;
   FILE *cfptr;


   printf("Enter search type  - \n 1. NAME \n 2. NIC \n 3.MOBILE \n ----> ");
   scanf("%c", &choice);

        printf("Enter search text : ");
        scanf("%s", &name);

        cfptr = fopen ("customer.dat", "r");

        while (!feof(cfptr)){

            fscanf(cfptr, "%s %s %s", fname, fnic, fmobile);

            printf("Read Name |%s|\n", fname );
            printf("Read NIC |%s|\n", fnic );
            printf("Read Mobile |%s|\n", fmobile );
   }
   fclose(cfptr);
   scanf("%d", &amount);

   return(0);
}

customer.dat Файл

Shan    100012  200202
Marsh   121213  667675
Kim     126573  663412

Этот код не является полным, так как я не могу отфильтровать одно имя, назначая

if(name == fname)

как я получение

присвоение выражению с ошибкой типа массива

Может ли кто-нибудь заполнить мне код для поиска и сохранения в другой файл, чтобы я мог выполнить часть расчета суммы?

Ответы [ 3 ]

1 голос
/ 05 мая 2020
int Search_in_File(char *fname, char *str) {
    FILE *fp;
    int line_num = 1;
    int find_result = 0;
    char temp[512];

    //gcc users
    //if((fp = fopen(fname, "r")) == NULL) {
    //  return(-1);
    //}

    //Visual Studio users
    if((fopen_s(&fp, fname, "r")) != NULL) {
        return(-1);
    }

    while(fgets(temp, 512, fp) != NULL) {
        if((strstr(temp, str)) != NULL) {
            printf("A match found on line: %d\n", line_num);
            printf("\n%s\n", temp);
            find_result++;
        }
        line_num++;
    }

    if(find_result == 0) {
        printf("\nSorry, couldn't find a match.\n");
    }

    //Close the file if still open.
    if(fp) {
        fclose(fp);
    }
    return(0);
}
1 голос
/ 05 мая 2020

несколько комментариев:

  1. при просмотре выбора следует читать его как целое число, а не как символ.
    scanf("%c", &choice); // change to scanf("%d", &choice);
single '=' - это задание, вы имели в виду сравнение, которое является double '=='
    if(name = fname) // comparison is if(name == fname)
для сравнения строки не используйте оператор '=='. используйте strcmp или реализуйте эквивалент strcmp.
0 голосов
/ 05 мая 2020

Спасибо за усилия. Как и в случае с изменениями, я изменил свой код, как показано ниже, и его работу. Не сверившись с названием, поочередно проверил с ni c.

#include <stdio.h>
int main(void){
    int nic, n, mobile;
    char name[30]; 
    FILE *aPtr;

    aPtr = fopen("Details.txt","w"); 
    if(aPtr == NULL){
        printf("File cannot be opened");
        return -1;
    }
    printf("Enter nic to search - "); 
    scanf("%d", &n); 
    fscanf(aPtr, "%d %-s %d", &nic, name, &mobile); 

    while(!feof(aPtr)){
        if(nic == n){
            Printf("%d %s %d \n", nic, name, mobile); 
        }
        fscanf(aPtr, "%d %s %d", &nic, name, &mobile); 
    }
    fclose(aPtr); 
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...