0

Hey guys I'm new to this, I managed to make c++ open a random .jpg file from a folder using srand, the files are named sequentially 1-25.
Now I want to print out which file has been chosen by the randomizer every time I run the programm and log it into a .txt file.
The log in the .txt file should look like this:
4
8
5
..and so on, so that it adds the result of the randomizer to a new line each time it gets executed.

This is the code I have so far:

#include <sstream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <fstream>

using namespace std;

int main()
{
    srand((unsigned)time(0));
    
    ostringstream oss;
    oss << "\"C:\\Users\\etc..";
    
    oss << rand() % 25 + 1;  
    oss << ".jpg\"";

    system(oss.str().c_str());
    system("pause");
    
    return 0;
}
wohlstad
  • 12,661
  • 10
  • 26
  • 39

1 Answers1

0

See below a complete example how you can achieve what you described.

The function LogToFile uses std::ofstream to open a file in append mode, and write to it.
You can change it if you'd like a different format (e.g. separate by commas instead of newline).

In order to call it with the number I added a variable n to hold the number (rather than streaming it directly into the std::ostringstream).

A side note: better to avoid using namespace std - see here Why is "using namespace std;" considered bad practice?.

The code:

#include <string>
#include <ctime>
#include <fstream>
#include <sstream>
#include <assert.h>

bool LogToFile(std::string const & filename, int n)
{
    std::ofstream file;
    file.open(filename, std::ios_base::app); // open in append mode 
    if (!file.is_open())
    {
        return false;
    }
    file << n << std::endl;
    file.close();
    return true;
}

int main()
{
    // change according to your needs:
    const std::string LOG_FILENAME = "log.txt"; 
    const std::string IMAGE_FOLDER = "C:\\tmp";

    srand((unsigned)time(0));
    int n = rand() % 25 + 1;

    // Add the number to the log file:
    bool bRes = LogToFile(LOG_FILENAME, n);
    assert(bRes);

    std::ostringstream oss;
    oss << "\"" << IMAGE_FOLDER << "\\" << n << ".jpg" << "\"";

    system(oss.str().c_str());
    system("pause");
    return 0;
}
wohlstad
  • 12,661
  • 10
  • 26
  • 39