Reggie 发表于 2016-2-27 02:38:01

C++程序出现问题,在线等,跪求帮忙,马上到due了,TA是个水货,谢大家了

跪求帮忙分析自己程序。
这个题就是把一个txt文件的东西按照%后面的指令按照单链表进行操作,我几乎完成了,但是最后sort的时候总是出错,我也不知道为什么不行,编译可以通过,但是运行的时候就不行了。

第一个分割线下是我的代码。
第二个分割线是txt文件内的数据。

马上交作业了,碰了一个水货TA,也解决不了,真心没办法了,求贴吧内大神们帮忙,C++的程序

。。。。。。。。。。。。分割线。。。。。。。。。。。。
#include <iostream>
#include <string.h>
#include <fstream>
#include <stdlib.h>

using namespace std;
class linklist
{
private:
    struct node
    {
      string name;
      int age;
      node *link;
    }*p;
public:
    linklist();
    void append(string Name, int Age);
    void add_as_first(char Name, int Age);
    void addafter(int c, char Name, int Age);
    void del(string Name, int Age);
    void sear(string Name);
    void display();
    void sortasc();
    int count();
    ~linklist();
    void temp();

};

linklist II;
ifstream infile;


void linklist::temp(){
    node *a;
    a = new node;
    a->name = "dfs";
    a->age =44;
    p=a;
    p=p->link;
    cout<<p->name<<endl<<p->age<<endl;
}

linklist::linklist()
{
    p =NULL;
}

void linklist:: display()
{
    node *q;
    cout<< endl;

    for (q=p; q != NULL; q =q->link)
      cout<< endl<<q->name <<"" <<q->age;
}

void linklist::append(string Name, int Age)
{
    node *q, *t;
    q = new node; t = new node;

    if (p== NULL)
    {
      p= new node;
      q->name=Name;   ///////////////
      q->age = Age;
      q->link= NULL;
      p=q;
    }
    else
    {
      q= p;

      while (q->link != NULL)
            q= q->link;

      t= new node;
      t->name= Name;
      t->age= Age;
      t->link=NULL;
      q->link= t;
    }
}
void linklist::add_as_first(char Name, int Age)
{
    node *q;

    q= new node;

    q->name= Name;
    q->age= Age;
    q->link= p;
    p=q;
}

void linklist::addafter(int c, char Name, int Age)
{
    node *q,*t;
    int i;

    for(i=0,q=p;i<c;i++)
    {
      q= q->link;
      if(q==NULL)
      {
            cout<<"\n There are less than"<< c<<"elements.";
            return;
      }
    }
    t= new node;
    t->name=Name;
    t->age= Age;
    t->link= q->link;
    q->link=t;
}

int linklist::count()
{
    node *q;
int c=0;
for( q=p ; q != NULL ; q = q->link )
c++;
return c;
}
void linklist::del(string Name, int Age)
{
    node *q,*r;
    q= p;

    if (q ->name==Name && q->age== Age)
    {
      p=q->link;
      delete q;
      return;
    }
    r= q;
    while (q!= NULL)
    {
      if (q->name == Name && q->age== Age)
      {
            r->link= q->link;
            delete q;
            return;
      }
      r= q;
      q= q->link;
    }
    cout<<"\nElenment"<<Name<<" not found.";
}
void linklist::sear(string Name)
{
      node *q;
    for(q=p; q!= NULL;q=q ->link)
    {
      if (q->name == Name)
      {
            cout<<endl<<q->name<<""<<q->age;
      }
    }

}
void linklist::sortasc()
{

int len = II.count();

node *q = p ;
    for (int i=0; i< len; i++)
{


    for(int j=0; j< len-i; j++,q= q->link)
    {


      if(q->age > q->link->age)
      {

            int tem;
            tem = q->age;
            q->age = q->link->age;
            q->link->age = tem;

            string ten;
            ten = q->name;
            q->name= q->link->name;
            q->link->name = ten;

      }
    }

}

}
linklist::~linklist()
{
    node *q;
    if (p==NULL)
    return;

    while(p != NULL)
    {
    q= p->link;
    delete p;
    p=q;
    }

}



int main()
{



    infile.open("a3.txt");
    if (infile.fail())
    {
      cout<<"\n File is failed to open!"<<endl;
    }

   char *a; a = new char;

   infile.getline(a,30);
    cout<<"the first instruction is: "<<a<<endl;
    cout<<"Do you want to play? (Y/N)";
    char huifu;
    cin>>huifu;
    if (huifu =='n'||huifu=='N')
    {
      exit(1);
    }
    else
      {
          for (int i=0; i<11; i++)
          {

         string name; int age;
            infile>>name>>age;
            II.append(name,age);
          }

      }

infile.getline(a,30);
cout<<endl<<"Next instruction is; %VISIT"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu1;
cin>>huifu1;
if (huifu1 =='n'||huifu1=='N')
    {
      exit(1);
    }
    else
    {
                II.display();
    }

infile.getline(a,30);
cout<<endl<<"Next instruction is; %DELETE"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu2;
cin>>huifu2;
if (huifu2 =='n'||huifu2=='N')
    {
      exit(1);
    }
    else
      {
      II.del("MARK",29);
      II.del("DAVID",21);
      II.del("DAVID",18);
      }
infile.getline(a,30);
cout<<endl<<"Next instruction is; %VISIT"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu3;
cin>>huifu3;
if (huifu3 =='n'||huifu3=='N')
    {
      exit(1);
    }
    else
    {
                II.display();
    }
infile.getline(a,30);
cout<<endl<<"Next instruction is; %SEARCH"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu4;
cin>>huifu4;
if (huifu4 =='n'||huifu4=='N')
    {
      exit(1);
    }
    else
    {
         II.sear("JONE");
         II.sear("DAVID");
         II.sear("LARRY");
    }
infile.getline(a,30);
cout<<endl<<"Next instruction is; %INSERT"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu5;
cin>>huifu5;

if (huifu5 =='n'||huifu5=='N')
    {
      exit(1);
    }
    else
    {
         II.append("LARRY",13);
         II.append("GARY",15);
         II.append("GARY",42);
    }


infile.getline(a,30);
cout<<endl<<"Next instruction is; %VISIT"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu6;
cin>>huifu6;
if (huifu6 =='n'||huifu6=='N')
    {
      exit(1);
    }
    else
    {
                II.display();
    }

infile.getline(a,30);
cout<<endl<<"Next instruction is; %INSERT"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu7;
cin>>huifu7;

if (huifu7 =='n'||huifu7=='N')
    {
      exit(1);
    }
    else
    {
         II.append("TERRY",23);

    }

infile.getline(a,30);
cout<<endl<<"Next instruction is; %DELETE"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu8;
cin>>huifu8;
if (huifu8 =='n'||huifu8=='N')
    {
      exit(1);
    }
    else
      {
      II.del("GARFIED",29);

      }

infile.getline(a,30);
cout<<endl<<"Next instruction is; %SEARCH"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu9;
cin>>huifu9;
if (huifu9 =='n'||huifu9=='N')
    {
      exit(1);
    }
    else
    {
         II.sear("PHIL");

    }
infile.getline(a,30);
cout<<endl<<"Next instruction is; %SORTASC"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu10;
cin>>huifu10;
if (huifu10 =='n'||huifu10=='N')
    {
      exit(1);
    }
    else
    {
         II.sortasc();

    }

    infile.getline(a,30);
cout<<endl<<"Next instruction is; %VISIT"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu11;
cin>>huifu11;
if (huifu11 =='n'||huifu11=='N')
    {
      exit(1);
    }
    else
    {
                II.display();
    }
   infile.getline(a,30);
cout<<endl<<"Next instruction is; %end"<<endl;
cout<<"Do you want to play?(Y/N)";
char huifu12;
cin>>huifu12;

      exit(1);

infile.close();
    return 0;
}




。。。。。。。a3.txt。。。。。。。。分割线。。。。。。。。。。。

%INSERT
MARK 29
DAVID 21
JOHN 44
JOHN 51
LARRY 39
MARK 21
DAVID 18
JOHN 28
MARK 35
DONALD 41
PHIL 26
%VISIT
%DELETE
MARK
DAVID
%VISIT
%SEARCH
JONE
DAVID
LARRY
%INSERT
LARRY 13
GARY 15
GARY 42
%VISIT
%INSERT
TERRY 23
%DELETE
GARFIELD 29
%SEARCH
PHIL
%VISIT
%SORTASC
%VISIT
%END

Reggie 发表于 2016-2-27 03:31:34

我是在codeblock上面写的,大神们如果觉得代码太长,可以就看sortasc()这个函数,就是在这里报的错
页: [1]
查看完整版本: C++程序出现问题,在线等,跪求帮忙,马上到due了,TA是个水货,谢大家了