Member 12719168 Ответов: 2

Как вычесть целочисленное значение из структуры с пользовательским вводом в связанном списке C?


Ниже приведен мой код здесь я пытаюсь вычесть itemnum в узле struct с пользовательским входным значением (x1).... но он не работает должным образом .



struct node                                                   // main structure
{
        int itemcode;
        int itemnum;                             //itemnum
        char name[30];
        struct node *next;
}
struct node *create,*end,*start,*temp,*prev,*temp1,*start1,*end1;
int x,y,x1,num,total;


void orderitem( int x,int x1)         // I am passing item code and itemnum 
{


    if(isempty())                        // function to check head pointer is !null
    {

        printf("Empty, can't order now");
    }
    else
    {

        temp=start;
        while(temp->next!=NULL && temp->itemcode!= x)
        {
            prev=temp;
            temp = temp-> next;
        }

        if(temp->next==NULL&&temp->itemcode!=x)  // searching with x i.e item code

        {
            printf("Element %d is not present in the list\n",x);
            return;
        }

        else if(start->itemcode==x)              //if item code is at first 
        {
            start1->itemnum=x1;

            start->itemnum-=start1->itemnum;

            if(start->itemnum<=0)         //deletes start if itemnumber less than 0
            {         
                start=start->next;
            }
        }
        else if(end->itemcode==x)              //checks the item code with end  pos
        {                                             

            end1->itemnum=x1;
            end->itemnum-=end1->itemnum;
        }
        if(end->itemnum<=0)                       //deletes end 
        {   end=prev;
            end->next=NULL;

        }


        else
        {
                temp1->itemnum=x1;                 //storing user's item number in  
                                                      temp1

                temp->itemnum-=temp1->itemnum;       

                if(temp->itemnum<=0)
                    prev->next=temp->next;

           
        }

    }
}


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

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

2 Ответов

Рейтинг:
2

Patrice T

Единственный способ найти, что не так в вашем коде, - это использовать отладчик, чтобы увидеть, что он действительно делает.

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

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

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


Member 12719168

спасибо человеку, который научился отладке, обнаружил,что это ошибка сегментации ... я успешно решил эту проблему ... интересно, почему учителя никогда не упоминали об отладке во время занятий, а теперь я задаюсь вопросом, как кто-то может ответить на такие вопросы ... https://github.com/Kishy-nivas/Linked-list-scenarios-/blob/master/SUPER%20MARKET%20scenario%20in%20c%20using%20linked%20list -мой полный проект.

Patrice T

Приятно слышать, что вы решили эту проблему благодаря отладчику.

Patrice T

Приятно слышать, что вы решили эту проблему благодаря отладчику.

Рейтинг:
14

OriginalGriff

Сделайте себе одолжение и сделайте отступы в этом коде должным образом: он и так почти не читается, а отступы значительно облегчают понимание того, что происходит. С кодом, прыгающим слева и справа, как паук на нелегальных наркотиках, нелегко даже найти, где начинается и заканчивается функция "orderitem", а тем более то, что она делает в это время! :)

Мы не можем запустить ваш код в тех же условиях, что и вы - мы понятия не имеем, какие данные вы вводите или что именно вы ожидаете, когда вы это сделаете. Так что вам придется начать с вопроса "что здесь происходит?".
К счастью, у вас почти наверняка есть отличный инструмент, который поможет вам сделать это: он называется отладчиком (хотя мы не знаем, какую систему вы используете, поэтому мы не можем дать вам точных инструкций о том, как его использовать, но Google может, я уверен).

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

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!


Member 12719168

спасибо человеку, который научился отладке, обнаружил, что это ошибка сегментации ... я успешно решил эту проблему ... интересно, почему учителя никогда не упоминали об отладке во время занятий ... https://github.com/Kishy-nivas/Linked-list-scenarios-/blob/master/SUPER%20MARKET%20scenario%20in%20c%20using%20linked%20list -мой полный проект.

OriginalGriff

Молодец!
Это весело, отладчик, не так ли?