c++: input unknown amount of int from file

dubstar

format c:
Joined
Dec 3, 2002
Messages
1,357
i'm pulling information from a file -- in this order -- first name, last name, scores (different amount of scores for each line).

example:
john doe 44 100 80 33 -1
jane johnson 33 -4
hooka smoker -9
etc etc 0 44 99 -44

the negative score is supposed to tell the code to stop, read it, but stop that line and move to the next line.

problem code:
Code:
[SIZE=2]in >> score;[/SIZE]
[SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2] (score >= 0)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]cout << score;[/SIZE]
[SIZE=2]}[/SIZE]
or

Code:
[SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] i=0;i<10;i++)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]in >> score[i + 0];[/SIZE]
[SIZE=2]cout << score[i + 0];[/SIZE]
[SIZE=2]}[/SIZE]
here is the whole function code:
Code:
[SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] ReadRecord()[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]ifstream in; [/SIZE][SIZE=2][COLOR=#008000]// input file[/COLOR][/SIZE]
[SIZE=2]string fname; [/SIZE][SIZE=2][COLOR=#008000]// first name[/COLOR][/SIZE]
[SIZE=2]string lname; [/SIZE][SIZE=2][COLOR=#008000]// last name[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] score;[/SIZE]
[SIZE=2][COLOR=#008000]//OPEN FILES[/COLOR][/SIZE]
[SIZE=2]in.open([/SIZE][SIZE=2][COLOR=#a31515]"c:\\in_infoproc.txt"[/COLOR][/SIZE][SIZE=2], ios::in); [/SIZE][SIZE=2][COLOR=#008000]// opens in.txt file for input[/COLOR][/SIZE]
 
 
[SIZE=2][COLOR=#008000]//READ RECORD[/COLOR][/SIZE]
[SIZE=2]ql_header(); [/SIZE][SIZE=2][COLOR=#008000]// program header (includes clear screen)[/COLOR][/SIZE]
[SIZE=2]cout << [/SIZE][SIZE=2][COLOR=#a31515]"\n\n\n\n\t\tRead Records\n\n\n"[/COLOR][/SIZE][SIZE=2];[/SIZE]
 
[SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2] (in.eof() == [/SIZE][SIZE=2][COLOR=#0000ff]false[/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]getline(in, fname, [/SIZE][SIZE=2][COLOR=#a31515]' '[/COLOR][/SIZE][SIZE=2]); [/SIZE][SIZE=2][COLOR=#008000]// first name[/COLOR][/SIZE]
[SIZE=2]getline(in, lname, [/SIZE][SIZE=2][COLOR=#a31515]' '[/COLOR][/SIZE][SIZE=2]); [/SIZE][SIZE=2][COLOR=#008000]// last name[/COLOR][/SIZE]
[SIZE=2]cout << [/SIZE][SIZE=2][COLOR=#a31515]"\t\tYour name is:\t"[/COLOR][/SIZE][SIZE=2] << fname << [/SIZE][SIZE=2][COLOR=#a31515]" "[/COLOR][/SIZE][SIZE=2] << lname << endl;[/SIZE]
[SIZE=2]cout << [/SIZE][SIZE=2][COLOR=#a31515]"\t\tYour score is:\t"[/COLOR][/SIZE][SIZE=2];[/SIZE]
[SIZE=2]in >> score;[/SIZE]
[SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2] (score >= 0)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]cout << score;[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] i=0;i<10;i++)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]in >> score[i + 0];[/SIZE]
[SIZE=2]cout << score[i + 0];[/SIZE]
[SIZE=2]}[/SIZE]
 
[SIZE=2]cout << [/SIZE][SIZE=2][COLOR=#a31515]"\n\t\t==============================================\n\n"[/COLOR][/SIZE][SIZE=2] << endl;[/SIZE]
[SIZE=2]}[/SIZE]
 
 
[SIZE=2][COLOR=#008000]//CLOSE FILES[/COLOR][/SIZE]
[SIZE=2]in.close();[/SIZE]
 
 
[SIZE=2][COLOR=#008000]//RETURN TO MENU[/COLOR][/SIZE]
[SIZE=2]Menu(0);[/SIZE]
 
 
[SIZE=2][COLOR=#008000]// ----------------------------------------------------------------------------------------------------------- END READ RECORD FUNCTION[/COLOR][/SIZE]
[SIZE=2]}[/SIZE]

i've tried this tons of different ways but cant seem to find one that works properly. eventually i have to put this in to an array, having fname and lname the arrays.. but if i dont understand the first parts, i'm not ready to put it into an array.
 
Last edited:

LordOfLA

Godlike!
Joined
Feb 2, 2004
Messages
7,026
Well getline looks like its reading until it gets a \r\n or any other combination of those two characters.

Seems to me you just need to check for a negative score in your variable, either strip it or not and move on. I don't really see what your problem is...
 

dubstar

format c:
Joined
Dec 3, 2002
Messages
1,357
for the first record it spits out the first and last name, no score (its negative)
the second record becomes aligned improperly, and then the first number (positive) is repeated over and over.... never stops


edit: you helped. all it takes is waking up. thanks man.

problem was that i wasnt reintroducing the new variable. in << score in to the loop.
 
Last edited:

Geffy

OSNN Veteran Addict
Joined
Mar 18, 2002
Messages
7,805
another alternative to getting the line data might be to use a std::istringstream.

I know that wasn't the question but it might make the algorithm simpler and easier to debug
 

dubstar

format c:
Joined
Dec 3, 2002
Messages
1,357
thanks geffy, i'll look into that when i get the program fully functional.

:)
 

Members online

No members online now.

Latest profile posts

Perris Calderon wrote on Electronic Punk's profile.
Hey ep!

All good with me, applying for microsoft mvp right now, should have done this a while ago.

Notifications don't work, I only found your response by comming back to hunt up some threads, if you want, give me your email address so we can keep in touch easier, mine is perriscalderon at gmail
Perris Calderon wrote on Electronic Punk's profile.
Ep, glad to see you come back and tidy up...did want to ask a one day favor, I want to enhance my resume , was hoping you could make me administrator for a day, if so, take me right off since I won't be here to do anything, and don't know the slightest about the board, but it would be nice putting "served administrator osnn", if can do, THANKS

Been running around Quora lately, luv it there https://tinyurl.com/ycpxl
Electronic Punk wrote on Perris Calderon's profile.
All good still mate?
Hello, is there anybody in there? Just nod if you can hear me ...

Forum statistics

Threads
61,974
Messages
673,294
Members
89,040
Latest member
PHMachelle