-
August 13th, 2003, 03:19 AM
#1
Intro to file input/file output in C++
Hey guys, this is my second tutorial, so dont expect something insanely good. You have to download it and unzip the file fstream.doc. I wrote it in Microsoft Word and it is about 6 pages long (it has a bunch of examples and other stuff in it). Also, i would recommend that you turn off autoformatting so Microsoft Word doesnt start to move the example code around. Also, turn off spelling and grammar check unless you want a lot of funky red and green lines. Hope you like it!! Also, please email me at wdpballa1@aol.com if you found a bug in the code or if i made an error somewhere.
Support your right to arm bears.
^^This was the first video game which i played on an old win3.1 box
-
August 13th, 2003, 03:27 AM
#2
very nice.. this is a great follow up to your intro to pointers..
-
August 13th, 2003, 03:34 AM
#3
Senior Member
hehe... very nicely done man! supreme work
-
August 13th, 2003, 03:59 AM
#4
thank you very much i appriciate it
Support your right to arm bears.
^^This was the first video game which i played on an old win3.1 box
-
August 13th, 2003, 09:45 PM
#5
White,
Read both your tuts and I must say they are excellently written. Even though I'm just recently getting back into the whole C scene, I could follow along with ease... even with out any C++ experience. Nice work...
-
August 14th, 2003, 04:07 AM
#6
As I was going through the tutorial, freshening up my fstream knowledge, I came to an error in one of your programs and a warning in another... thought I'd let you know so you could fix it...
Your code:
Code:
#include <iostream>
#include <fstream>//includes ifstream class for file
//input and ofstream class for file output
using namespace std;
int main ()
{
ifstream fin; //creates ifstream object called fin
fin.open("filename3.txt"); //opens "filename.txt"
if (!fin.is_open()) //if you cannot open the file…
{
cerr << "Error 1--Cannot find or open file "filename3.txt";
fin.clear(); //reset failbit
return 0;
}
else
{
cout << "This is what is inside of filename3.txt: \n";
char ch[80];
while(fin.get(ch[80])) //reads characters from the file
cout << ch[80]; //prints characters to the screen
fin.close();
return 0;
}
}
Fixed:
Code:
#include <iostream>
#include <fstream>//includes ifstream class for file
//input and ofstream class for file output
using namespace std;
int main ()
{
ifstream fin; //creates ifstream object called fin
fin.open("filename3.txt"); //opens "filename.txt"
if (!fin.is_open()) //if you cannot open the file…
{
cerr << "Error 1--Cannot find or open file 'filename3.txt'";
fin.clear(); //reset failbit
return 0;
}
else
{
cout << "This is what is inside of filename3.txt: \n";
char ch[80];
while(fin.get(ch[80])) //reads characters from the file
cout << ch[80]; //prints characters to the screen
fin.close();
return 0;
}
}
And then in your final program (very nicely written), there isn't a big error but its a warning so I thought I drop it in here:
Your code:
Code:
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
const char *fileA="bat1.txt";
const char *fileB="bat2.txt";
const char *fileC="bat3.txt";
int main (void)
{
char ch, ch1, c[80]; //sorry for bad variable names
ifstream fin, fin1, fin2; //creates 3 ifstream objects
ofstream fout; //creates 1 fout object
fin.open(fileA); //opens "bat1.txt" for reading
//checks to see if "bat1.txt" can be open
if (!fin.is_open())
{
cerr << "Couldn't open file " << fileA << " \n";
return 0;
}
fin1.open(fileB); //opens "bat2.txt" for reading
//checks to see if "bat2.txt" can be opened
if (!fin1.is_open())
{
cerr << "Couldn't open file " << fileB << " \n";
return 0;
}
if (fin.is_open() && fin1.is_open())
{
fout.open(fileC); //opens "bat3.txt" writing
while (fin && fin)
{
while ((fin.get(ch)) && ch != '\n')
{
fout << ch; //writes content of "bat1.txt"
//to "bat3.txt"
}
while ((fin1.get(ch1)) && (ch1 != '\n'))
{
fout << ch1; //writes content of "bat2.txt"
//to "bat3.txt"
}
fout << endl;
}
fout.close(); //closes "bat3.txt" for writing
cout << "Finished coping " << fileA << " and ";
cout << fileB << " to " << fileC << endl << endl;
cout << "This is what is inside of " << fileC << ":\n";
fin2.open(fileC); //opens "bat3.txt" for reading
while(fin2.get(c[80])) //reads characters from the file
cout << c[80]; //prints characters to the screen
}
fin.close(); //closes "bat1.txt" for writing
fin1.close(); //closes "bat2.txt" for writing
fin2.close(); //closes "bat3.txt" for writing
// Missing a return statement...
}
Fixed:
Code:
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
const char *fileA="bat1.txt";
const char *fileB="bat2.txt";
const char *fileC="bat3.txt";
int main (void)
{
char ch, ch1, c[80]; //sorry for bad variable names
ifstream fin, fin1, fin2; //creates 3 ifstream objects
ofstream fout; //creates 1 fout object
fin.open(fileA); //opens "bat1.txt" for reading
//checks to see if "bat1.txt" can be open
if (!fin.is_open())
{
cerr << "Couldn't open file " << fileA << " \n";
return 0;
}
fin1.open(fileB); //opens "bat2.txt" for reading
//checks to see if "bat2.txt" can be opened
if (!fin1.is_open())
{
cerr << "Couldn't open file " << fileB << " \n";
return 0;
}
if (fin.is_open() && fin1.is_open())
{
fout.open(fileC); //opens "bat3.txt" writing
while (fin && fin)
{
while ((fin.get(ch)) && ch != '\n')
{
fout << ch; //writes content of "bat1.txt"
//to "bat3.txt"
}
while ((fin1.get(ch1)) && (ch1 != '\n'))
{
fout << ch1; //writes content of "bat2.txt"
//to "bat3.txt"
}
fout << endl;
}
fout.close(); //closes "bat3.txt" for writing
cout << "Finished coping " << fileA << " and ";
cout << fileB << " to " << fileC << endl << endl;
cout << "This is what is inside of " << fileC << ":\n";
fin2.open(fileC); //opens "bat3.txt" for reading
while(fin2.get(c[80])) //reads characters from the file
cout << c[80]; //prints characters to the screen
}
fin.close(); //closes "bat1.txt" for writing
fin1.close(); //closes "bat2.txt" for writing
fin2.close(); //closes "bat3.txt" for writing
return 0;
}
Anyways, very nicely written tutorial, not confusing at all and covers everything thats needed... maybe for your next tutorial you should do something like writing a header file or etc...
jag291
-
August 14th, 2003, 04:36 AM
#7
thanks for the error spotting. I actually save all of my files the comiler creates as .bat files, so i had to redo the whole code to make it .txt files. Then, i realized while i was working in Microsoft word that my comments were still using the .bat extension, so i had to change them all around. The first error you pointed out is actually an important error, and i very much appoligize. It was around 11 pm and i was making some minor corrections not in my IDE but in Mircosoft word cause i didnt want to recompile everything. Anyways, thanks again for pointing these errors out, i will defiently remember them for next time
Support your right to arm bears.
^^This was the first video game which i played on an old win3.1 box
-
September 2nd, 2003, 12:13 AM
#8
Junior Member
besides the errors, very nice tutorial white...good work
If there isn\'t a path, then make a path
-
September 2nd, 2003, 02:30 AM
#9
Excellent tutorial, the only criticism I could possibly make is the use of 'using namespace std' (which I personally dislike, but a lot of people seem to use).
-
September 2nd, 2003, 08:35 PM
#10
Why dont you like using namespace std;? I mean, it is a i know it is a using directive (or is it a using declaration? i always confuse those two ) Anyways, do you think my code should have looked like this:
using std::cout;
using std::cin;
using std::endl;
or should it have looked like this:
std::cout << "Hello World" << std::endl;
its been a long time since i have done stuff like this, so i cant remember if the examples above are correct, but my final quesiton is why dont you like using "using namespace std;"?
Support your right to arm bears.
^^This was the first video game which i played on an old win3.1 box
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
|