#include "fstream"
#include "string"
using namespace std;
int MAX_LENGTH = 3;
const int INCRESEMENT = 2;
int COUNT = 0; //Count the amount of the data
struct ReadData
{
int data;
ReadData *next;
};
void ArraySort(int a[], int number); //Sort function
void InsertNumber() ; //Insert function
void main()
{
int *Array = new int[MAX_LENGTH];
int ntestnumber = 0;
cout << "Please input your number,input -1 to exit"<<endl;
cin >> ntestnumber;
while (ntestnumber != -1 )
{
Array[COUNT] = ntestnumber; COUNT++;
if (COUNT == MAX_LENGTH)
{
MAX_LENGTH += INCRESEMENT;
int *p = new int[MAX_LENGTH];
for (int i = 0; i < COUNT; i++)
{
p[i] = Array[i];
}
delete []Array;
Array = p;
}
cin>>ntestnumber;
}
ArraySort(Array, COUNT); //order the data
ofstream out_file;
out_file.open("a.txt", ios::out);
if (!out_file)
{
cerr<<"Open failure,exit the task"<<endl;
exit(-1);
}
for (int i = 0; i < COUNT; i++)
{
out_file<<Array[i]<<" ";
}
out_file.close();
delete []Array;
InsertNumber();
}
//Order data from small to big
void ArraySort(int *pointer, int number)
{
for (int i = 1; i <= number-1; i++) {
for (int j = 0; j < number-i; j++) {
if (pointer[j] > pointer[j+1])
{
int temp = pointer[j];
pointer[j] = pointer[j+1];
pointer[j+1] = temp;
}
}
}
}
void InsertNumber()
{
ifstream in_file;
in_file.open("a.txt", ios::in);
if (!in_file)
{
cerr<<"Open error,exit the task"<<endl;
exit(-1);
}
ReadData head; //create a node before the head node
head.data = 0;
head.next = NULL;
ReadData *p = NULL;
ReadData *q = &head;
int n_data;
while (!in_file.eof()) {
in_file >> n_data;
p = new ReadData;
p->data = n_data;
p->next =NULL;
q->next = p;
q = p;
head.data++;
}
p = &head;
while (p->next)
{
p = p->next;
cout << p->data<<endl;
}
in_file.close();
当输入1 3 4 2 四个数十时,输出InsertNumber()函数会将最后一个数据读两遍,为什么啊,我使用了while(in_file>>n_data){},这方法能行,但是想请问高手那个为什么不行啊