0

The following code is supposed to read records from input and store them in a file called file.dat. Then it is supposed to arrange these records in ascending order, but for some reason the program hangs at line no.61. Can someone please tell me what's wrong?

#include <iostream>
#include <fstream>
#include <strstream>

int main()
{
	std::ofstream file;
	file.open("file.dat",std::ios::trunc|std::ios::binary);
	if(!file)
		std::cout<<"unable to open for output";

	struct record
	{
		char code[6];
		char name[20];
		int i;
	};

	record r;
	int a = 0;

	while(1)
	{
		std::cout<<"Record " << a + 1 << std::endl;
		std::cout<<"Enter character code, name and an int \n";
		std::cin.ignore();
		std::cin.getline(r.code,6);
		std::cin.getline(r.name,20);
		std::cin>>r.i;
		file.write((char *)&r,sizeof(r));
		std::cout<<"\nAdd another (y\\n) : ";
		char c;
		std::cin>>c;
		if(c == 'n')
			break;
		a++;
		std::cout<<'\n'<<'\n';
	}
	file.close();

	std::fstream file1("file.dat",std::ios::in|std::ios::out|std::ios::binary);
	if(!file1)
		std::cout<<"unable to open file1";

	else
	{
		if(a>0)
		{	while(a)
			{
				file1.seekp(0);
				for(int i = a; i>0;i--)
				{
					record r1;
					file1.read((char *)&r,sizeof(r));
					file1.read((char *)&r1,sizeof(r1));
					if(r1.i < r.i)
					{
						file1.seekp(-(sizeof(r)*2),std::ios::cur);
						file1.write((char *)&r1,sizeof(r));
						file1.write((char *)&r,sizeof(r));
						file1.seekg(-(sizeof(r)),std::ios::cur);
					}
				}
		
				a--;
			}
		}
		file1.close();
	}

	std::ifstream file2("file.dat",std::ios::binary);
	if(!file2)
	{
	std::cout<<"unable to open file2";
        exit(0);
        }
	while(1)
	{
		std::cout<<"\n\n";
		file2.read((char *)&r,sizeof(r));
		if(file2.eof())
			break;
		std::cout<<r.code<<'\t'<<r.name<<'\t'<<r.i;
	}
}

Edited by Dani: Moved from C to C++ forum

1
Contributor
1
Reply
2
Views
4 Years
Discussion Span
Last Post by Rupindersingh
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.