すでに返信しているユーザーのおかげで!今、私はまだ出力ファイルにストリームを出力する際に問題があります。私はout_stream.put(ch)を使うべきだとは思わない。またはout_stream < < ch; 。ストリームを出力するためにここに何かがありません。これで、key_shiftの変更結果を出力ファイルに出力する場所をどのように修正できますか?
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
void display_menu(); //Display the menu
void get_files(ifstream& in_stream, ofstream& out_stream);
void encrypt(ifstream &in_stream, ofstream &out_stream, int key_shift); //Encrypts a file
int get_num_1_through_10(int number); //Gets an integer numbered 1-10 and has the user re-enter integer if incorrrect
int main()
{
ifstream in_stream; //declaring the input file path
ofstream out_stream; //delcaring the output file path
string in_filename, out_filename;
int option; //Declaration of user "option" choice
int key_shift; //Declaration of user "shift key value" choice
do //Runs menu at least once
{
display_menu(); //function call
cin >> option; //User inout for the option menu
switch(option) {
case 1: cout << "Enter a value between 1 and 10 for the shift key value: "; //Prompts the user to choose a "shift key value" between integers 1-10
cin >> key_shift; //User input for the "shift key value"
get_num_1_through_10(key_shift); //Function call to get a number 1-10
cout << "You have chosen a shift key value of " << key_shift << endl; //Prints to screen users "shift key value" choice
break;
case 2: cout << "Time to get the files set up!\n";
cout << "Beginning the encryption process...\n";
encrypt(in_stream, out_stream, key_shift);
in_stream.close();
out_stream.close();
break;
case 3: break;
case 4: cout << "Goodbye" << endl; //User chooses to quit the program
return 0;
default: cout << "Enter a choice 1-4" << endl; //Alerts the user of incorrect input
}
} while (option != 4); //While option is anything other than 1-4, quits
return 0; //Quits
}
void display_menu() {
cout << "1) Set the shift key value" << endl;
cout << "2) Encrypt a message" << endl;
cout << "3) Decrypt a message" << endl;
cout << "4) Quit" << endl;
cout << "Type in an option and hit enter: ";
}
int get_num_1_through_10(int number) {
if ((number > 0) && (number < 11)) { //Excluding integers except integers 1-10
return number; //If true, returns the users integer choice
}
else { //If false, returns user back to menu function
cout << "Please input a number between 1 and 10\n"; //Reminds the user of incorrect integer input
return main(); //Returns to main function
}
}
void encrypt(ifstream &in_stream, ofstream &out_stream, int key_shift) {
ifstream in_filename;
ofstream out_filename;
get_files(in_filename, out_filename);
char ch;
do {
(in_stream.get(ch));
while (ch != '\n') {
ch = ch + key_shift;
out_stream.put(ch);
}
}
return;
}
void get_files(ifstream& in_stream, ofstream& out_stream) {
string in_filename, out_filename;
cout << "Enter the source file name: ";
cin >> in_filename; //User types in the file name to receive data
cout << "Enter the destination file name: ";
cin >> out_filename; //User types in the file name to output the data to
in_stream.open(in_filename.c_str()); //Opens the stream for input file
out_stream.open(out_filename.c_str()); //Opens the stream for out file
if (in_stream.fail() || out_stream.fail()) { //If the input or output fail
cout << "Error opening input/output files\n"; //Alerts the user of failure
exit(1); //Terminates
}
cout << "Files opening!" << endl;
}
key_shiftキーは、ユーザーによって先に入力されます。 – Logan
それから、コードのすべてを提供していないことはすでに分かっています。 [このwhile(!in_stream.eof())は途中で問題になる](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-間違っている)、問題でない場合。すべてのコードなしで確実にする方法はありません。 – user4581301
待ってください。一度 'ch'を読むだけで、魔法のように変わるように動作します。うまく動かない。 – user4581301