using namespace std;

void main(){
ifstream inf("data.txt");
char name[30];

while(!inf.getline(name, 30, '|').eof())

char jersey_number[10];
char best_time[10];
char sport[40];
char high_school[40];
inf.getline(jersey_number, 10, '|');// #read thru pipe
inf.getline(best_time, 10); // #read thru newline
inf.getline(sport, 40, '|'); // #read thru pipe
inf.getline(high_school, 40); // #read thru newline

cout<<"jersey number: "<<jersey_number<<endl;
cout<<"best time: "<<best_time<<endl;
cout<<"sport: "<<sport<<endl;
cout<<"high school: "<<high_school<<endl;

Given data file: John|83|52.2
sprinting|San Marin

Anyone can explain how the above program work?
i get this from internet source
It will be a great help in doing my assignment.
The problems that avoid me from understanding the syntax
how the getline function that take in 3 arguements
What while(!inf.getline(name, 30, '|').eof()){} actually
Urgent...please help...

istream::getline (both the two arg and the three arg versions) fill a c-style array with characters read from an input stream. characters are extracted upto a maximum of n-1 (where n is the second arg) or the delimiter (defaults to a newline in the two arg version, the third arg in the three arg version) is encountered. if the delimiter is found, it is read and discarded (ie. the next char read would be the one after the delimiter). an ending null character that signals the end of a c-string is automatically appended.

if the stream encounters an error during input (typically eof), the state of the stream is set to some not good state. getline returns a reference to the stream; so
while(!inf.getline(name, 30, '|').eof())
means 'while the state of the stream is not eof'.
while( inf.getline(name, 30, '|') ) would have been more accurate; this would mean
'while the state of the stream is good'

I think the short answer is why you would want to understand a piece of code that sucks so much.

Agreed. --joeprogrammer
This article has been dead for over six months. Start a new discussion instead.