[prog] using strings in C++
Wolf Rising
wolfrising at gmail.com
Mon Feb 21 04:07:05 EST 2005
Changed this part to use cin.getline, any ideas on how to get the
print out to work correctly?
Thank you !!
while (cdCount < LIBRARY_SIZE) {
cout << "Enter CD Information: (-1 to quit)" << endl;
cout << "Enter year: ";
cin >> year;
if (year == -1) { break; }
cout << "Enter artist: ";
cin.getline(artist,SIZE);
//cin >> artist;
cout << "Enter title: ";
cin.getline(title,SIZE);
//cin >> title;
cout << "Enter genre: ";
cin.getline(genre,SIZE);
//cin >> genre;
On Sun, 20 Feb 2005 09:46:03 -0500, Marize Pommot-Maia
<marize at pommot.net> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Wolf Rising wrote:
> | This is a project I've been working on for quite a while, the idea was
> | to create a program that allows the user
> | to catalog cds. At the moment, I'm only trying to get it to allow the
> | user to enter 10 cds, and I would like
> | the option of writing it to a text file (I'm not sure if that part
> | works yet or not...)
> |
> | The program compiles and runs but there are at least two things I know
> | of that aren't working correctly.
> | First, if you have a entry with more than one word it fouls things up,
> | for example if you enter just
> | Beatles, it will prompt you correctly for the next line, enter The
> | Beatles and it thinks you've
> | entered two different fields. Also, at the end when it should display
> | back what the user has entered,
> | it displays a series of numbers. Any ideas, help, suggestions would be
> | appreciated. Usual disclaimer,
> | I'm not a student just trying to learn.
> |
> | Thanks!
> |
> | #include <iostream>
> | #include <cstring>
> | #include <fstream>
> | using namespace std;
> |
> | class cd {
> |
> | public:
> | cd() {};
> | cd(const cd&);
> | cd(string artist, string title, string genre, int year);
> | void showCD();
> | void setCD(string artist, string title, string genre, int year);
> | string get_artist() { return artist; }
> | string get_title() { return title; }
> | string get_genre() { return genre; }
> | int get_year() { return year; }
> |
> | private:
> | string artist;
> | string title;
> | int year;
> | string genre;
> |
> | };
> |
> | //*********
> | cd::cd(const cd&){
> |
> | char *artist = "";
> | char *title = "";
> | char *genre = "";
> | int year = 0;
> |
> | }
> |
> | //*********
> |
> | cd::cd (string sartist, string stitle, string sgenre, int iyear) {
> | // create a new cd
> | artist = sartist;
> | title = stitle;
> | genre = sgenre;
> | year = iyear;
> |
> | }
> |
> | //*********
> |
> | void cd::showCD() {
> | // show a cd
> | cout << artist << " " << genre << " " << title << " " << year << endl;
> | }
> |
> | //*********
> |
> | void saveCDLibrary(cd cdLibrary[], int length) {
> | // need to write to a file
> | ofstream fout("cdinfo.dat", ios::out); // Create a file called
> | "cdinfo.dat" for output (writing)
> |
> | if (!fout) { // unable to create file
> | cerr << "Failed to open output file";
> | exit(1);
> | }
> | for (int i; i < length; i++) {
> | fout << cdLibrary[i].get_artist() << cdLibrary[i].get_title() <<
> | cdLibrary[i].get_genre() << cdLibrary[i].get_year();
> |
> | }
> | }
> |
> | //*********
> |
> | void printCDLibrary(cd cdLibrary[], int length) {
> |
> |
> | for (int i; i < length; i++) {
> | cdLibrary[i].showCD();
> |
> | }
> | }
> |
> | //*********
> |
> |
> | void readCDLibrary(cd cdLibrary[], int length) {
> | string input, artist, title, genre;
> | int year;
> |
> | // Open the file
> | ifstream fin("cdinfo.dat", ios::in);
> |
> | if (!fin) { // unable to open data file
> | cerr << "File could not be opened";
> | exit(2);
> | }
> | int i=0;
> | while ( fin >> artist >> title >> genre >> year ) {
> | cdLibrary[i++].setCD(artist, title, genre, year);
> | }
> | }
> |
> | //*********
> |
> | void cd::setCD (string a, string t, string g, int y)
> | {
> | artist = a;
> | title = t;
> | genre = g;
> | year = y;
> | }
> |
> |
> | //*********
> |
> |
> |
> | int main()
> | {
> | int cdCount = 0;
> | const int LIBRARY_SIZE = 10;
> | string artist, title, genre;
> | int year;
> | cd cdLibrary[LIBRARY_SIZE];
> | bool ans;
> |
> | // Ask if they want to read the CDs from a file or enter new
> | // data:
> |
> | cout << "Read from file (1) or Enter new data (0)? ";
> | cin >> ans;
> |
> | if (ans) {
> | // read from the file
> |
> | readCDLibrary(cdLibrary, LIBRARY_SIZE);
> |
> | } else {
> | // read in information about CDs
> | while (cdCount < LIBRARY_SIZE) {
> | cout << "Enter CD Information: (-1 to quit)" << endl;
> | cout << "Enter year: ";
> | cin >> year;
> | if (year == -1) { break; }
> | cout << "Enter artist: ";
> | cin >> artist;
> | cout << "Enter title: ";
> | cin >> title;
> | cout << "Enter genre: ";
> | cin >> genre;
> |
> | cdLibrary[cdCount].setCD(artist, title, genre, year);
> |
> | cdCount++;
> | }
> | }
> |
> | saveCDLibrary(cdLibrary, LIBRARY_SIZE);
> | printCDLibrary(cdLibrary, LIBRARY_SIZE);
> |
> |
> | return 0;
> | }
> | _______________________________________________
> | Programming mailing list
> | Programming at linuxchix.org
> | http://mailman.linuxchix.org/mailman/listinfo/programming
> |
> |
>
> I took a quick look at your program. You're using "cin" to input the
> string. However, "cin" reads characters until a space, newline, tab or
> EOF indicator is found. When you want to get an entire line of text you
> could use the function "cin.getline". Since you mentioned you wanted to
> learn, I leave to you finding out more about it. Another way to deal
> with this would be by overloading the operator "cin" so it can read the
> entire string.
>
> - --
> - ------------------------------------------------------------------------
> Marize Pommot-Maia
> marize at pommot.net
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.0 (GNU/Linux)
> Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
>
> iD8DBQFCGKKr4y2uvMn0AkcRApw6AKCzmJXJN8LWYM1qH13Y0eoQxYsOKACghw0w
> D5BwNN4ZXCJg/x9RxrJmu18=
> =WN61
> -----END PGP SIGNATURE-----
>
More information about the Programming
mailing list