2016-04-27 5 views
-1

Я начинаю думать, что это совершенно невозможно ...Сохранить все консоли из данных в новый текстовый файл C++

У меня есть небольшая консольная программа, которая в основном небольшой калькулятор, как только пользователь сделал один вычисление и результат, тогда программа затем петли, чтобы позволить пользователю выполнять другой расчет. Пока пользователь продолжает выбирать другой расчет, программа никогда не заканчивается.

Теперь я хотел бы сохранить ВСЕ данные, отображаемые в консоли, в новый текстовый файл на рабочем столе.

У меня есть набор функций, объявляющих полный путь к файлу и имя файла в строку, если это возможно, я хотел бы, чтобы программа сохранила текстовый файл для этого точного пути и имени файла. Если это невозможно, рабочий стол пользователя будет работать нормально.

До сих пор я пробовал Fstream, но не повезло; может быть, я что-то делаю неправильно? Я как бы новичок в этом, поэтому любая помощь будет очень признательна.

Ниже приведен код программы.

#include <iostream> 
#include <ctime> 
#include <string> 
#include <sstream> 
#include <windows.h> 
#include <Lmcons.h> 
using namespace std; 

int main() 
{ 
    //creates file name 
    char timeNow[20]; 
    time_t now = time(NULL); 
    strftime(timeNow, 20, "%d.%m.%Y %H%Mhrs", localtime(&now)); 

// Creates desktop file path that includes the users user name 
char username[UNLEN+1]; 
DWORD username_len = UNLEN+1; 
GetUserName(username, &username_len); 
stringstream user; 
string UserName; 
user << username; 
user >> UserName; 
string pathName = "c:/users/" + UserName + "/desktop/" + timeNow + ".txt"; 

// Declare Variables 
int suA, splitA, cornerA, streetA, sixlineA, payout; 
double Cvalue = 1; 
double cash; 
int winnum = 0; 
int table = 0; 
std::string Another ("y"); 

// Programme Header 
cout << "Roulette Bet Calculator & Payout Log!" << endl; 
cout << "By Chris McCarthy" << endl << endl; 

    //Bet Calculator Loop 
    while (Another == "y") { 
    cout << "Table no: AR"; 
    cin >> table; 
    cout << "Winning Number? "; 
    cin >> winnum; 
    char timeNow[20]; 
    time_t now = time(NULL); 
    strftime(timeNow, 20, "%H:%M:%S %d/%m/%Y", localtime(&now)); 
    cout << timeNow << endl << endl; 
    cout << "Please enter the chip value? " << char(156); 
    cin >> Cvalue; 
    cout << "Please enter the amount of Straight Ups? "; 
    cin >> suA; 
    cout << "Please enter the amount of Splits? "; 
    cin >> splitA; 
    cout << "Please enter the amount of Corners? "; 
    cin >> cornerA; 
    cout << "Please enter the amount of Streets? "; 
    cin >> streetA; 
    cout << "Please enter the amount of Six Lines? "; 
    cin >> sixlineA; 
    cout << endl; 

    // Calculates then writes the final payout and cash value 
    payout = (suA * 35) + (splitA * 17) + (cornerA * 8) + (streetA * 11) + (sixlineA * 5); 
    cash = Cvalue * payout; 
    cout << "The payout is: " << payout << endl; 
    cout << "The cash value of the payout is: " << char(156) << cash << endl << endl; 

    // Adds another bet or terminates programme 
    cout << "Add another bet? (y/n) "; 
    cin >> Another; 
    cout << "____________________________________________________________" << endl << endl; 
} 
return 0; 
} 
+0

_ «До сих пор я пробовал Fstream, но мне не повезло, может быть, я делаю сом что-то не так? »_ Да. Вы сделали что-то не так. Никто не может сказать больше, так как никто не знает, что именно вы пробовали. –

+0

Хорошо. Может быть, очевидно, что я сделал что-то не так. Я сбил это с ума и в принципе ничего не придумал. Возможно ли это? –

+0

_ «До сих пор я пробовал Fstream, но не повезло» _ - не очень хорошая постановка проблемы. Основываясь на ответе, который вы приняли, у вас есть ошибки в коде, но вы не вызвали их и другие проблемы, связанные с вашей проблемой. Это важно, когда вы публикуете SO, потому что мы не будем пытаться разбираться в разных вещах или изучать ваш код, не зная, что искать. –

ответ

0

В C++ 98 Формирование ofstream open() является:

void open (const char* filename, ios_base::openmode mode = ios_base::out); 

Ваш PathName является тип строки. Копирование значения pathName в массиве char и передача его в методе open(), который работал на моем компьютере.

Так что я сделал (!!!), объявил массив символов и скопировал путьName в этот массив и использовал его в open().

char pname[100] = {'\0'}; 
for(int i=0; i<sizeof(pname); i++) { 
    pname[i] = pathName[i]; 
} 

std::ofstream ofs; 
ofs.open (pname, std::ofstream::out | std::ofstream::app); 

и сразу после каждого

cout << ... << endl;
я поставил
ofs << ...<< endl;

который сгенерировал файл в моем рабочем столе под названием «27.04.2016 1643hrs.txt», и я получил эти строки внутри файла:

 
Roulette Bet Calculator & Payout Log! 
By Chris McCarthy 

Table no: ARWinning Number? 16:43:19 27/04/2016 

Please enter the chip value? œPlease enter the amount of Straight Ups? Please enter the amount of Splits? Please enter the amount of Corners? Please enter the amount of Streets? Please enter the amount of Six Lines? 
The payout is: 238 
The cash value of the payout is: œ238 

Add another bet? (y/n) ____________________________________________________________ 


Не забудьте включить «#include <fstream>» в заголовке

+0

Фантастический! Спасибо! Поэтому в основном путь к файлу должен был быть преобразован из String в Char, который будет использоваться в качестве пути для file.open. Мне удалось получить все файлы cout для сохранения в файл, теперь как мне пойти на сохранение cin в файл, в основном, так что .txt-файл почти является копией консоли? –

+1

Ничего, сумел взломать. пример ... cout << "Пожалуйста, введите количество прямых ups?"; cin >> suA; ofs << endl << "Пожалуйста, введите количество прямых вверх?" << suA; –

0

Использование потока, ofstream consoleCopy; consoloeCopy.open(filepath); где путь к файлу - путь, который вы создаете с помощью своих функций. Тогда это всего лишь вопрос написания файла, consoleCopy << consoleString;.

Для достижения того, что вы хотите, вам понадобится либо сохранить весь вывод/ввод в строку, и записать ее в файл в конце, либо записать в файл по мере поступления. Следующий сайт должен помочь Вам с письмом к файлам, http://www.cplusplus.com/doc/tutorial/files/

+0

Спасибо. Просто прочитал, звучит многообещающе, даст ему шанс! –

Смежные вопросы