Что не так с кодом? Это не выходит из цикла - PullRequest
0 голосов
/ 19 июня 2020

Сценарий вопроса: есть 2 файла customer.dat и transaction.dat, содержащих количество записей (структура записи определяется кодом bt-структур). В файле transacton.dat есть 2 типа tran_types (d / c дебет или кредит ) по дебету и кредиту баланс в файле customer.dat будет обновлен.

#include<stdio.h>
main()
{
    struct tran
    {
        int accno;
        char tran_type;
        float amount;
    };
    struct tran t;
    struct cust
    {
        int accno;
        char name[30];
        float balance;
    };
    struct cust c;
    FILE *fp,*ft;
    fp=fopen("customer.dat","rb+");
    if(fp == NULL)
    {
        printf("Cant open file\n");
        exit(1);
    }
    
    ft=fopen("transaction.dat","rb");
    if(ft == NULL)
    {
        printf("Error\n");
    }
    while(fread(&c,sizeof(c),1,fp)==1)
    {
        
        rewind(ft);
        while(fread(&t,sizeof(t),1,ft)==1)
        {
            if(c.accno == t.accno)
            {
                if(t.tran_type=='d')
                {
                    c.balance=(c.balance-t.amount);
                    fseek(fp,-sizeof(c),SEEK_CUR);
                    fwrite(&c,sizeof(c),1,fp);
                    
                    
                }
                else if(t.tran_type =='c')
                {
                    
                    c.balance= (c.balance + t.amount);
                    fseek(fp,-sizeof(c),SEEK_CUR);
                    fwrite(&c,sizeof(c),1,fp);
                
                }
            }
            
        }
        
        
    }
    fclose(fp);
    fclose(ft);
    printf("Success");
}

1 Ответ

0 голосов
/ 20 июня 2020

В вашем коде нет ничего принципиально неправильного. Но есть две проблемы:

  1. Вы используете printf() без перевода строки \n в конце строки формата. Таким образом, поток не сбрасывается на стандартный вывод и будет выводить много отпечатков на go на вывод или только после завершения программы.

  2. Вы использовали 5-секундный sleep(). В зависимости от количества клиентов и транзакций ваш l oop может прослужить очень долго.

Эти два факта вместе означают, что вы, вероятно, не ждали достаточно времени, чтобы получить результат. . Просто удалите sleep(), и он станет быстрым и будет работать правильно.

...