954,168 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

read to end of line problem

I have no clue why this isn't working! Basically, I've got my tree and
everything working, but now I need to fit it to the input the instructor
gave me. What I need to do is read the first part of a line and then
input each following term into the tree... My problem come with reading
until the end of the line. For some reason, it won't recognise the newline
'\n' character. Right now I'm using strings but I've created a little
sample program below that shows what I'm talking about:

my input looks like this:
I1 kim abelo xxxx abcd xxxy
I2 abelo timmy
D1 kim abelo
D2 timmy
T1
T2
ID
IS

What I'm thinking this code should do is print out that first line only
but it keeps going.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  char temp;

  ifstream infile("in.txt");

  infile >> temp;
  while ((!infile.eof()) && (temp != '\n')) {
    cout << temp;
    infile >> temp;
  }
  
  cout << endl;

  return 0;
}


output received:
I1kimabeloxxxxabcdxxxyI2abelotimmyD1kimabeloD2timmyT1T2IDIS


Thanks in advance.

one1082
Newbie Poster
2 posts since Oct 2003
Reputation Points: 10
Solved Threads: 0
 

Why not use fgetc? I don't really use C++ constructs, so in C it would be (and I'm just writing this on the fly so expect some errors):

#include
#include

int main() {

char myChar;
FILE *in = fopen("myfile.txt", "r"); // Open myfile.txt read-only
while((myChar=fgetc(in)) != EOF) {
if(myChar=='\n') printf("\n");
else printf("%c",myChar);
}
return 0;
}

File: myfile.txt

this is
data
hehe


%./a.out
this is
data
hehe


If you want to break after the first line:

#include
#include

int main() {

char myChar;
FILE *in = fopen("myfile.txt", "r"); // Open myfile.txt read-only
while((myChar=fgetc(in)) != EOF) {
if(myChar=='\n') {
printf("\n");
break;
} else printf("%c",myChar);
}
return 0;
}

subtronic
Junior Poster
117 posts since Aug 2003
Reputation Points: 44
Solved Threads: 1
 

Replace

infile >> temp;


with

temp = infile.get() ;


That should do the trick. :)

Dante Shamest
Light Poster
46 posts since Apr 2003
Reputation Points: 13
Solved Threads: 0
 

temp = infile.get() works perfectly. Thanks a ton. If you don't mind though could you explain the difference? I don't understand why one works and one doesn't. I appreciate it.

Tim

one1082
Newbie Poster
2 posts since Oct 2003
Reputation Points: 10
Solved Threads: 0
 

The reason that
temp = infile.get()
works and
infile >> temp
does not is because the >> operator ignores whitespace and new lines. get() reads in every character, no matter what

kwvanderlinde
Newbie Poster
1 post since Mar 2008
Reputation Points: 10
Solved Threads: 0
 

Thank the gods.

Someone finally answered this question that we've all been struggling with this for 4 1/2 long years,

what a relief.

someone let Tim know he can mark this as "solved"

jephthah
Posting Maven
2,587 posts since Feb 2008
Reputation Points: 2,143
Solved Threads: 179
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You