Неожиданный вывод программы - PullRequest
0 голосов
/ 13 января 2019

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

Вот исходный код, который у меня есть на данный момент:

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

struct emp{
    char name[40];
    int age;
    float bs;
};
main()
{
    FILE *fp, *ft;
    struct emp e;
    char choice;
    char another;
    char empname[40];
    fp = fopen("emp.dat","rb+");
    if(fp == NULL)
    {
        fp = fopen("emp.dat", "wb+");
        if(fp == NULL)
        {
        printf("File cannot be opened\n");
        system("pause");
        exit(0);
        }
    }
    while(1)
    {
    system("cls");
    printf("1. Add New Record\n");
    printf("2. Modify to Record\n");
    printf("3. Delete to Record\n");
    printf("4. Display Records\n");
    printf("0. Exit\n");
    printf("Enter your choice: \n");
    fflush(stdin);
    choice = getche();               
    printf("\n");
    switch(choice)
    {
        case '1':
            another = 'Y';
            fseek(fp,0,SEEK_END);
            while(another == 'Y')
            {
                printf("Enter name, age and basic salary: \n");
                scanf("%s%d%f", e.name, &e.age, &e.bs);
                fwrite(&e,sizeof(e),1,fp);
                printf("Add more records (Y/N)\n");
                fflush(stdin);
                scanf("%c", &another);
            }
            break;
        case '2':
            printf("Enter name of employee to modify record!\n");
            scanf("%s", empname);
            rewind(fp);
            while(fread(&e,sizeof(e),1,fp) == 1)
            {
                while(strcmp(e.name,empname) == 0)
                {
                    fseek(fp,-1,SEEK_CUR);
                    printf("Enter new name, age, basic salary!\n");
                    scanf("%s %d %f", e.name, &e.age, &e.bs);
                    fwrite(&e,sizeof(e),1,fp);
                }
            }
            break;
         case '3':
            another = 'Y';
            while(another == 'Y')
            {
                rewind(fp);
                ft = fopen("temp.dat", "wb+");
                printf("Enter name of employee to delete  record!\n");
                scanf("%s", &empname);
                while(fread(&e,sizeof(e),1,fp) == 1)
                {
                    while(strcmp(e.name,empname) != 0)
                    {
                        fseek(fp,-1,SEEK_CUR);
                        fwrite(&e,sizeof(e),1,ft);                          
                    }
                    fclose(fp);
                    fclose(ft);
                    remove("emp.dat");
                    rename("temp.dat","emp.dat");
                    fp = fopen("emp.dat","wb+");
                }
                printf("Do you want to delete more record/s (Y/N)!\n");
                fflush(stdin);
                another = getche();
            }
            break;
        case '4':
            rewind(fp);
            while(fread(&e, sizeof(e), 1, fp) == 1)
            printf("%s %d %0.2f\n", e.name, e.age, e.bs);
            break;
        case '0':
            exit(0);
            break;
        default:
            printf("Enter correct choice!\n");  
            break;  
    }
        fclose(fp);
        system("pause");
    }
}

Вот моя программа работает и с примером вывода:

Image displaying program output

...