В истинном духе c ++
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::string filename, filepath, data;
std::cout << "Please enter a name for your file: " << std::endl;
std::cin >> filename;
std::cout <<" Please enter a directory to save your file in: " << std::endl;
std::cin >> filepath;
std::ofstream file((filepath + "/" + filename).c_str());
//std input is being copied to the file
file << std::cin.rdbuf();
file << std::flush;
file.close();
return 0;
}
В духе C для объединения пути
{
char* fspec;
if (-1 == asprintf(&fspec, "%s/%s", filepath.c_str(), filename.c_str()))
{ perror("asprintf"); return 255; }
std::cout << fspec << std::endl;
free(fspec);
}
Мне было не совсем понятно, как вы будете требовать обработки ввода;Если вы предпочитаете, вы можете читать его в буфер памяти разными способами, например, без потери пробела:
std::stringstream ss;
ss << std::cin.rdbuf();
// OR
std::copy(std::istreambuf_iterator<char>(std::cin) ,
std::istreambuf_iterator<char>(),
std::streambuf_iterator<char>(ss));
.... и несколько альтернатив, которые удаляют пробелы:
std::copy(std::istream_iterator<std::string>(std:: cin),
std::istream_iterator<std::string>(),
std::stream_iterator<std::string>(ss));
bool my_isspace(char c) { return std::isspace(c); } // in namespace scope
std::remove_copy_if(std::istreambuf_iterator<char> (std::cin),
std::istreambuf_iterator<char>(),
std::streambuf_iterator<char>(ss), my_isspace);