Critical Fist Ответов: 4

Почему я получаю 8s повторно, где я должен получать 827 в качестве вывода для следующего кода?



#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
struct node{
int data;
struct node* next;
};
struct node* head;
void insert(int data,int n)
{
 node* temp1=new node();
 temp1->data= data;
 temp1->next=NULL;
 if (n==1){
    temp1->next=head;
    head=temp1;
    return;
 }
 node* temp2=head;
 for(int i=0;i<n-2;i++){
    temp2=temp2->next;
}
temp1->next=temp2->next;
temp2->next= temp1;
};
void print(){
node* temp=head;
while(temp!= NULL)
    cout<<temp->data<<"\n";
}
int main()
{
 head=NULL;
 insert(2,1);
 insert(7,2);
 insert(8,1);
 print();
}


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

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
struct node{
int data;
struct node* next;
};
struct node* head;
void insert(int data,int n)
{
 node* temp1=new node();
 temp1->data= data;
 temp1->next=NULL;
 if (n==1){
    temp1->next=head;
    head=temp1;
    return;
 }
 node* temp2=head;
 for(int i=0;i<n-2;i++){
    temp2=temp2->next;
}
temp1->next=temp2->next;
temp2->next= temp1;
};
void print(){
node* temp=head;
while(temp!= NULL)
    cout<<temp->data<<"\n";
}
int main()
{
 head=NULL;
 insert(2,1);
 insert(7,2);
 insert(8,1);
 print();
}

4 Ответов

Рейтинг:
8

Critical Fist

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


Рейтинг:
32

Garth J Lancaster

Подумайте о своем коде печати

void print(){
node* temp=head;
while(temp!= NULL)
    cout<<temp->data<<"\n";
}
. после того как вы напечатали узел, как вы думаете, может быть, вам захочется перейти к следующему узлу? следующий узел (подсказка)
void print(){
node* temp=head;
while(temp!= NULL)
    cout<<temp->data<<"\n";
    temp = ??????????
}


Critical Fist

Эй, спасибо тебе, приятель!!!!

OriginalGriff

МММ ... фигурные скобки? :смеяться:

Garth J Lancaster

:rollseyes:

Рейтинг:
20

OriginalGriff

Посмотрите на свой метод печати:

void print(){
    node* temp=head;
    while(temp!= NULL)
        cout<<temp->data<<"\n";
}
Ты не двигаешься с места. temp указатель узла внутри цикла ...


Critical Fist

Эй, спасибо тебе, приятель!!!!!

OriginalGriff

Всегда пожалуйста!

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

Critical Fist

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

OriginalGriff

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

Это не замена "ручной отладки" - это инструмент, который делает ручную отладку намного более эффективной.

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

Critical Fist

поставляется ли он вместе с комплиером или мне следует загрузить его вручную

OriginalGriff

Зависит. Используете ли вы IDE (интегрированную среду разработки)?
Если вы редактируете и компилируете в одном и том же приложении, то вы и есть, и это будет включать в себя отладчик.
Одним из (очень) популярных является Visual Studio, который имеет бесплатную версию:
https://visualstudio.microsoft.com/vs/community/
Это лучшая среда разработки на планете, за исключением none, и так было с тех пор, как она была впервые выпущена в 1997 году (и даже тогда ее корни уходят в 1980-е годы!).
Если вы не используете его, вы действительно упускаете!
Если вы имеете его и не знаете, как использовать отладчик, Google - или даже Microsoft - поможет.

Рейтинг:
14

Patrice T

Цитата:
Почему я получаю 8s повторно, где я должен получать 827 в качестве вывода для следующего кода?

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

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

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

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


Critical Fist

киндофф хотел отладить себя, чтобы понять, как ведет себя компьютер