Неожиданный вывод программы

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

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

#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");
    }
}

Вот моя запущенная программа и пример вывода:

Неожиданный вывод программы

Результат не такой, как вы ожидаете, но вы не показываете то, что ожидаете (просто напишите ожидаемый результат вручную), сделайте это. Также объясните, чего вы ожидаете. Также объясните, какова цель программы, почему желаемый результат соответствует вашим ожиданиям, есть ли логика? Кратко опишите цель программы. Все это вы должны объяснить и прояснить вам, а не догадываться читателям.

Yunnosch 13.01.2019 18:42

Возникает ли нежелательный результат только в определенных ситуациях? Например. для какого входа? Нужен ли весь показанный код для демонстрации нежелательного поведения? Если нет, пожалуйста, сосредоточьтесь. Т.е. сделайте минимальный воспроизводимый пример.

Yunnosch 13.01.2019 18:44

Можете ли вы написать более точное название пункта? С текущим вы рискуете быть проигнорированным. Можете ли вы сосредоточиться на том, что кажется неправильным, вместо того, чтобы это выглядело неожиданным?

Yunnosch 13.01.2019 18:45

Например, добавьте записи, а затем выберите вариант 4. Он должен отобразить все записи. Но ничего не отображается. Вы можете видеть на прикрепленной картинке. Ничего не отображается. Далее, если вы попытаетесь модифицировать запись. Он просит ввести новое имя, возраст и bs. Но затем он продолжает спрашивать снова и снова, когда вы даже вошли. Думаю, если вы выполните этот код и попытаетесь использовать все 5 модулей. Вы узнаете проблемы.

rm82co 14.01.2019 01:15

@Yunnosch, а вы проверяли код?

rm82co 14.01.2019 10:34

Извините, я не понял ваш последний комментарий. Не могли бы вы перефразировать?

Yunnosch 14.01.2019 12:37

@Yunnosch Я пытаюсь еще раз объяснить. Это программа для переключателей. Существуют случаи, например, 1 для добавления новой записи, CASE 2 для изменения записи, CASE 3 для удаления записи и 4 для отображения списка записей. Теперь сначала я перехожу к первому СЛУЧАЮ 1 и добавляю туда записи. Теперь я хотел вывести на экран весь список этих записей. Я перехожу к СЛУЧАЮ 4. Потому что в СЛУЧАЕ 4 есть код для отображения всех этих записей. Он должен отображать все записи, когда я перехожу в СЛУЧАЙ 4. Но он ничего не отображает. Что там не так в коде? Вы поняли мою точку зрения?

rm82co 14.01.2019 14:16

Пожалуйста, редактировать ваш вопрос, чтобы добавить дополнительную информацию и подробности, вместо того, чтобы скрывать их в комментарии.

Yunnosch 14.01.2019 18:02

Если результат CASE 1 и 4 вызывает сомнения, сосредоточьтесь на одном из них. Можете ли вы продемонстрировать, что случай 4 позволяет выводить жестко закодированный контент? Можете ли вы использовать отладчик, чтобы убедиться, что случай 1 обеспечивает правильное сохранение? Постарайтесь найти проблему в одном случае, а не в комбинации, а затем упростите проблему, проанализировав и продемонстрировав эту проблему в одном случае. Вы также можете задать вопрос по проблеме только в одном случае. Убедитесь, что один футляр является пуленепробиваемым, затем переходите к следующему. Рекомендую сначала довести результат до совершенства, он может стать частью ваших инструментов.

Yunnosch 14.01.2019 18:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
78
0

Другие вопросы по теме