Member 13990067 Ответов: 3

Я не могу понять почему этот код не работает пожалуйста помогите мне


После вставки имени сотрудника код перестает работать.
Пожалуйста, решите эту проблему, я сохраню весь код ниже.

Что я уже пробовал:

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

typedef struct emp

{  
    int id;
    char nm;
    struct emp *prev;
    struct emp *next;
}list;
  list *start;
  list *end;

///////////////////////////////////// Functios /////////////////////////////////////

void initlist (void);
struct emp *create_emp(void);    
void append_emp( struct emp *element);    
int  delete_emp(int d);    
void edit_emp(int old , int current);    
list *display ();    
struct emp *search_emp(int s);  

//////////////////////////////////////////////////////////////////////
///////////////////////////////////// MAIN ////////////////////////////
//////////////////////////////////////////////////////////////////////

int main()
{   
int cases;
char nm1;int id1;list *c1; list *i1;    
int c2,del;
int old3,new3;
int i5;list *c5;


initlist();

    printf("\nLinked List for Employees\n");
    printf("---------------------------------------------\n");

    printf("Press 1 to INSERT an Employee into the list \n");
    printf("Press 2 to DELETE an Employee from the list \n");
    printf("Press 3 to EDIT Employee \n");
    printf("Press 4 to DISPLAY the list \n");    
    printf("Press 5 to SEARCH the list \n");    
    printf("Press 6 to EXIT the program\n");    
    printf("---------------------------------------------\n");

    while (1)
        {
            scanf("%d",&cases);
           if (cases ==6)
            {
                break;
            }

           switch(cases) 
           { 
               case 1: //why when i run this code it's stop working   
                           c1=create_emp();
                           append_emp(c1);    
                           printf("Enter the new name : ");    
                           scanf("%c\n",& nm1);    
                           printf("Enter the new id : ");    
                           scanf("%d\n",& id1);    
                           i1 ->id =id1;
                           c1->nm=nm1;
                break;


                case 2: //why when i run this code it's stop working

        printf("Enter the Employee id you want to delete\n");

                            scanf("%d\n",c2);    
                            del=delete_emp(c2);    
                            if (del == 0)    
                            {    
                                printf("Not found");
                            }    
                            else    
                            {    
                                printf("Removed form list");
                            }   
                break;


                case 3: //why when i run this code it's stop working

                            printf("Enter the Employee id you want to Edit \n");
                            scanf("%d",old3);    
                            printf("Enter the new Employee id");    
                            scanf("%d",new3);    
                            edit_emp(old3,new3);    
                break;       

                case 4:
                            display();    
                break;   

                case 5:    
                            printf("Enter the id you'r searching for :");    
                            scanf("%d",i5);    
                            c5=search_emp(i5);    
                            if(c5==NULL)    
                            printf("not found\n");    
                            else    
                            printf("found\n");        
                break;  

           }
        }
   }

///////////////////////////////////// Creat list ///////////////////////////

void initlist (void)
{
    start=end=NULL;
}



    ///////////////////////////////////// Create emp /////////////////////////////////////
struct emp *create_emp(void)
{
    return ((struct emp*)malloc(sizeof(struct emp)));
}

///////////////////////////////////// Insert emp /////////////////////////////////////
void append_emp( struct emp *element )
{
    if ((start==NULL)&&(end==NULL))
    {
        start=element;
        end=element;
        element->next=NULL;
        element->prev=NULL;
    }
    else
    {
        end->next=element;
        element->prev=end;
        end=element;
        element->next=NULL;
    }
}

///////////////////////////////////// Delete emp /////////////////////////////////////
int  delete_emp(int d)
{
    struct emp *temp;
    temp=search_emp (d);
    if(temp==NULL)
    return 0;
    if(start==end)
    {
        start=NULL;
        end=NULL;
        free(temp);
        return 1;
    }
    else if(temp==start)
    {
        start=start->next;
        start->prev=NULL;
        free(temp);
        return 1;
    }
    else if (temp==end)
    {
        end=temp->prev;
        end->next=NULL;
        free(temp);
        return 1;
    }
    else
    {
        temp->prev->next=temp->next;
        temp->next->prev=temp->prev;
        free(temp);
        return 1;
    }
}

///////////////////////////////////// Edit emp /////////////////////////////////////
void edit_emp(int old , int current)
{
    list * temp;
    temp = search_emp(old);
    if (temp==NULL)
    {
        printf("NOT EXIST\n");
    }
    else
    {
        temp->id =current;
    }
}

///////////////////////////////////// Display list /////////////////////////////////////
list *display ()
{
    int d=1;
    list*temp;
    temp=start;
    while (temp!=NULL)
    {
        printf("The Employee %d ID is : %d\n",d,temp->id);
        temp=temp->next;
        d++;
    }
}

///////////////////////////////////// Search dy ID /////////////////////////////////////
struct emp *search_emp(int s)
{
    struct emp *temp;
    temp=start;
    while((temp!=NULL)&&(temp->id!=s))
    {
        temp=temp->next;
    }
    return temp;
}

phil.o

Отладьте свой код, как вам сказал ОГ в своем решении. Никто здесь не захочет делать это за вас; более того, вы можете обнаружить, что это довольно интересное занятие.

3 Ответов

Рейтинг:
23

Leo Chapiro

Ваш список * i1 не создан:

switch(cases)
{
    case 1:    //why when i run this code it's stop working
                c1=create_emp();
                append_emp(c1);
                printf("Enter the new name : ");
                scanf("%c\n",& nm1);
                printf("Enter the new id : ");
                scanf("%d\n",& id1);

                // because you are missing this part:
                i1 = create_emp();

                i1->id =id1;
                c1->nm=nm1;
     break;


И знаете, как я его нашел? Я отлаживать свой код!
Может быть, тебе стоит сделать это в следующий раз самому? :)


Member 13990067

спасибо за вашу заботу!!
один раз исполни его !! мне пришлось ввести имя трижды, так что я не получаю точного вывода

Member 13990067

кто-нибудь это сделал?

Рейтинг:
2

KarstenK

Для этой общей проблемы проблем в коде сделан отладчик. Извлечь из этого учебник по отладчику как им пользоваться.

Я думаю, что вы найдете проблему с вашим кодом, как копия или бесплатно на каком-то недопустимом указателе памяти.


KarstenK

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

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

Рейтинг:
1

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Я не могу сказать вам, как использовать ваш отладчик - я понятия не имею, какие из них у вас есть, но быстрый Google с названием вашей IDE и словом "отладчик" почти наверняка даст вам учебник. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!