이미 답변 한 사용자 덕분에! 이제 출력 파일에 스트림을 출력하는 데 여전히 문제가 있습니다. 나는 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