「stackoverflowで答えが見つからない」のではなく、「自分が何を間違っているのか分からない」のように、大きな違いです!
とにかく、コードは以下に添付されています。それが行うことはかなり基本的なもので、ユーザーが作成したテキスト ファイルを取り込み、暗号化されたものを吐き出します。この場合、ユーザーは、実際の各文字の間にいくつのジャンク文字を配置するかを指定します。(IE: "Hello" という単語をジャンク文字 1 文字で暗号化すると、"9H(eal~lo") のようになります)
私の問題は、何らかの理由で、入力ファイルを正しく読み取っていないことです。以前に復号化で行ったのと同じセットアップを使用してファイルを読み込んでいますが、今回はゴミ文字を読み込んでおり、ファイルに出力するように指示すると、代わりに画面に出力され、次のようになります出力ファイルには何も入れられていません (作成中ですが、それは私が何かを正しく行ったことを意味します。私を指摘してください!
コード:
string start;
char choice;
char letter;
int x;
int y;
int z;
char c;
string filename;
while(start == "enc")
{
x = 1;
y = 1;
cout << "How many garbage characters would you like between each correct character?: " ;
cin >> z;
cout << endl << "Please insert the name of the document you wish to encrypt, make sure you enter the name, and the file type (ie: filename.txt): " ;
cin >> filename;
ifstream infile(filename.c_str());
ofstream outfile("encrypted.txt", ios::out);
while(!infile.eof())
{
infile.get(letter);
while ((x - y) != z)
{
outfile << putchar(33 + rand() % 94);
x++;
}
while((x - y) == z)
{
outfile << letter;
y = 1;
x = 1;
}
}
outfile.close();
cout << endl << "Encryption complete...please return to directory of program, a new file named encrypted.txt will be there." << endl;
infile.close();
cout << "Do you wish to try again? Please press y then enter if yes (case sensitive).";
cin >> choice;
while ループの先頭に貼り付けたのは宣言変数です。これは、暗号化するだけでなく、復号化も行う非常に大きなコードの一部です。完全に機能するため、復号化の部分は省略しました。この部分です。に問題があります。
助けてくれてありがとう!
編集::私はVisual C++ Express 2008を使用していますが、エラーも警告もまったくないことがわかります。
重要な編集 ファイルに出力されていることがわかりました!ただし、ASCII文字ではなく数字を出力しており、本来あるべき文字の文字化けも出力しています。「infile.get(letter)」に戻ると、新しい文字が取得されません。したがって、現在、問題は2つあるようです。1)ASCII文字の代わりに数字を印刷します。2) 実際のキャラクターの代わりにガベージを使用する。
Question Answered 「重要な編集」の 2 番目の部分を見つけました ...何かに test.txt という名前を付けるとわかります...これは、C++ プログラムに入力すると、実際には test.txt.txt と呼ばれることを意味します。どんなプログラムでもうんざりさせるのは、ごくわずかで単純な詳細であることがわかります。ジョージ・ショアに感謝します。入力ファイルが間違った場所にあるというあなたのコメントは、実際のアイテム名を試すというアイデアを与えてくれました。
回答を手伝ってくれた皆さん、ありがとうございました!