Попытка записать и получить данные из файла в C, но бесконечно получать только последние (плохо знакомые с кодированием) - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть задача, которую меня просят сначала записать данные в файл после получения этих данных обратно (имена номеров счетов и остатки) и распечатать их. Я написал часть, но я не могу вернуть все данные, я получаю только последние бесконечные времена. Как я могу получить все по одному?

(и извините за плохой английский sh из c)

мой код

#include <stdio.h>

int main()
{
    int account;
    char name[50];
    double balance;

        FILE *cfPtr;
        char str[100];

        if((cfPtr=fopen("clients.dat","w"))==NULL)
        {
            printf("File could not be opened\n");
        }
        else
        {
        printf("Enter the account, name and balance.\n");
        printf("Enter EOF to end input.\n");
        printf("?");
        scanf("%d %s %lf", &account, name, &balance );
        while (!feof(stdin))
            {
            fprintf(cfPtr, "%d %s %.2f \n", account, name, balance);
            printf("?");
            scanf("%d %s %lf", &account, name, &balance);
            }
            fclose(cfPtr);
        }     
        rewind(cfPtr);
        while(!feof(cfPtr))
        {
        fscanf(cfPtr,"%d %s %lf",&account, name, &balance);
        printf("%d %s %.2f",account,name,balance);      
        }
        return 0;
}




и компиляция результат

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Я решил это с помощью добавления счетчика для каждого ввода данных и зациклил последний раз fscanf.

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

int main()
{
    int account;
    char name[50];
    double balance;
    int acc;
    char nam[50];
    double bal;
    int counter=0;
    int i;

        FILE *cfPtr;

cfPtr=fopen("clients.dat","w+");
                                            printf("Enter the account, name and balance.\n");
                                            printf("Enter EOF to end input.\n");
                                             printf("?");
        scanf("%d %s %lf", &account, name, &balance );
        while (!feof(stdin))
            {
            fprintf(cfPtr, "%d %s %.2f \n", account, name, balance);
            printf("?");
            scanf("%d %s %lf", &account, name, &balance);
            counter++;
            }

            rewind(cfPtr);
                    printf("AccountNum       Name    Balance\n");
        for(i=0; i<counter; i++) {
            fscanf(cfPtr, "%d %s %lf", &acc, nam, &bal);
            printf("%10d %10s %10.2lf\n", acc, nam, bal);
        }
        fclose(cfPtr);
        return 0;
}

0 голосов
/ 11 апреля 2020

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

fopen("clients.dat","w+"));  // notice "w+"

Вам не следует закрывать файл, если вы планируете выполнить какую-либо операцию после закрытия , это ошибка в этом контексте:

    while(...)
    {
        ... 
        printf("?");
       scanf("%d %s %lf", &account, name, &balance);
    }
    fclose(cfPtr);       
   // you can't do any read-write operation with the file after fclose();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...