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

Reading out to a file/Null String Troubles

This is my first time working with outputting data to a file, so I've got some rough code that I need some pointers on.

else if (decision == "S" || decision == "s"){
        cout << "File name? " <<"("<<filename<<")"<< endl;
        cin >> newfile;
        if (newfile == '/0'){
        outdata.open("filename");
        for (k =0; k < rows; k++){
           for (m =0; m < cols; m++)
           outdata<< (image[k][m]);
           outdata<< "\n";
           outdata.close();
           }
}
        return 0;
//      else {
//      outdata.open("newfile");
//      for (k =0; k < rows; k++){
//         for (m =0; m < cols; m++)
//         outdata<< (image[k][m]);
//         outdata<< "\n";
//         outdata.close();
//         }
//     }
//      return 0;
}

If the person doesn't enter anything then it overwrites the file that was opened, and if the user enters something then it just pours the image into that filename. I'm not sure how to use null string, and also the outdata.open requires quotation marks around whatever is inside the parenthesis so I can't use the two strings filename and newfile. And I turned my else statement into a comment at the moment because the compiler doesn't like it so I'm trying to figure out what's wrong with that now.

DemonSpeeding
Light Poster
31 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

Er, when you post code make sure to place it between 'code' blocks, like this:

[code]
std::cout << "Hello, world!" << std::endl;
[/code]

which looks like this:

std::cout << "Hello, world!" << std::endl;


I assume thatfilename is a std::string and outdata is a std::ostream. The stream classes are meant for parsing data, not pure string input. Instead, say:

std::getline( std::cin, filename );
if (filename.empty()) filename = "newfile.txt";

outdata.open( filename.c_str() );

A very useful website is http://www.cppreference.com/

Hope this helps.

Duoas
Postaholic
2,043 posts since Oct 2007
Reputation Points: 1,140
Solved Threads: 229
 

Thanks for the help, I am now able to save to a file if the user enters one, however it still doesn't work if the user doesn't enter a filename. If that happens, the program is to assume the user wants to overwrite the file that they originally opened.

else if (decision == "S" || decision == "s"){
        cout << "File name? " <<"("<<filename<<")"<< endl;
        cin >> newfile;
        if (newfile.empty()) {
        outdata.open(filename.c_str() );
        for (k =0; k < rows; k++){
           for (m =0; m < cols; m++)
           outdata<< (image[k][m]);
           outdata<< "\n";
           }
           outdata.close();
        }
        else {
        outdata.open(newfile.c_str() );
        for (k =0; k < rows; k++){
           for (m =0; m < cols; m++)
           outdata << (image[k][m]);
           outdata << "\n";
          }
           outdata.close();
        }
return 0;
}
DemonSpeeding
Light Poster
31 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

It isn't working because you have not obeyed my advice. The user can hit enter a zillion times and it won't make any difference as long as you are using cin >> newfile; .

Also, notice how most of the lines you have written are exactly the same. Put all the stuff that writes to file by itself,once, after the file is opened using your if...else statement.

Duoas
Postaholic
2,043 posts since Oct 2007
Reputation Points: 1,140
Solved Threads: 229
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You