2016-04-27 4 views
-1

私はこれは完全に不可能だと思うし始めている...保存すべてのコンソールからデータを++

ユーザーが1つをやった後、私は、基本的に小さな電卓で小さなコンソールプログラムを持っていますその結果、プログラムはループして、ユーザーが別の計算を実行できるようにします。ユーザーが別の計算を追加し続ける限り、プログラムは決して終わることはありません。

これで、コンソールに表示されているすべてのデータをデスクトップ上の新しいテキストファイルに保存できるようになりました。

私は、ファイルパスとファイル名の完全な文字列を宣言する一連の関数を用意しています。可能であれば、この正確なファイルパスと名前にテキストファイルを保存したいと思います。可能でない場合、ユーザーのデスクトップは正常に動作します。

これまでのところ私は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を試しましたが、運がなかった、おそらく私はsomをやっています何か間違っている? "あなたは間違ったことをしました。誰も正確に何を試したか分からないので、誰ももっと言うことはできません。 –

+0

たぶん私は間違ったことをしたことは明らかです。私はこのことから地獄を見つけ出し、基本的に何も出てこなかった。それも可能ですか? –

+0

_これまでFstreamを試してみたが運がなかったのは良い問題ではない。あなたが受け入れた答えに基づいて、あなたのコードには誤りがありますが、それらを呼び出すことはなく、あなたの問題に関連する他の問題もありません。これは、あなたが何を探すべきかを知らずに異なることを試みたり、あなたのコードを調べたりすることがないので、あなたがSOに投稿するときに重要です。 –

答えて

0

は次のとおりです。

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

あなたのパス名が文字列型です。 char配列のpathName値をコピーし、open()メソッドで渡すと、私のPCで動くようになりました。

私が行ったこと(!!!)は、char配列を宣言し、pathNameをその配列にコピーしてopen()で使用しました。

 
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) ____________________________________________________________ 


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;
後、私は、「2016年4月27日の1643hrs.txt」という名前のデスクトップにファイルを生成し、私は、ファイル内のこれらの文字列を得た
ofs << ...<< endl;

を置きます

ヘッダーに「#include <fstream>」を含めることを忘れないでください。

+0

すばらしい!ありがとうございました!だから、基本的にfilepathをfile.openのパスとして使用するには、文字列からCharに変換する必要がありました。私はすべてのcoutをファイルに保存することができましたが、現在はどのようにcinをファイルに保存するのですか.txtファイルはほぼコンソールの複製です。 –

+1

気にしないで、それを解読することができました。例... cout << "ストレートアップの量を入力してください"; cin >> suA; ofs << endl << "ストレートアップの量を入力してください" << suA; –

0

ofstreamの使用、ofstream consoleCopy; consoloeCopy.open(filepath);ここで、filepathは、関数で生成するパスです。それではファイルに書いてみるだけです。consoleCopy << consoleString;

あなたが望むものを実現するためには、出力/入力のすべてを文字列に格納し、最後にファイルに書き込むか、ファイルに書き込む必要があります。 ofstream open()のC++ 98の形成には、ファイルへの書き込みのお手伝いをする必要があり、以下のサイトで、http://www.cplusplus.com/doc/tutorial/files/

+0

ありがとうございます。読んでスルーして、有望だと思って、それを撃つだろう! –

関連する問題