我试图通过理解C ++来运行Caesar程序,并且一旦调试它就不会保持打开状态。该怎么办?
我没有使用system(“ pause”)。我也尝试过getchar(),它在其他应用程序中也可以使用,但不适用于该可执行文件。
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
/**
Encrypts a stream using the Caesar cipher
@param in- the stream to read from
@param out- the stream to write to
@param k- the encryption key
*/
void encrypt_file(ifstream& in, ofstream& out, int k)
{
char ch;
while (in.get(ch))
{
out.put(ch + k);
}
}
int main(int argc, char* argv[])
{
int key = 3;
int file_count = 0; // The number of files specified
ifstream in_file;
ofstream out_file;
for (int i = 1; i < argc; i++) //Process all command-line arguments
{
string arg = argv[i]; // The currently processed argument
if (arg == "-d") // The decryption option
{
key = -3;
}
else // It is a file name
{
file_count++;
if (file_count == 1) // The first file name
{
in_file.open(arg.c_str());
if (in_file.fail()) // Exit the program if opening failed
{
cout << "Error opening input file " << arg << endl;
return 1;
}
}
}
}
if (file_count != 2) // Exit if the user didn't specify two files
{
cout << "Usage: " << argv[0] << " [-d] infile outfile" << endl;
return 1;
}
encrypt_file(in_file, out_file, key);
getchar();
//system("pause");
return 0;
}
预期结果是在解密代码时应用程序保持打开状态。
答案 0 :(得分:0)
您实际上并没有将ofstream指向任何地方。据我所知,ofstream将缓冲输入,直到您将其指定给某个要指向的地方(免责声明,我可能是错误的)。
无论如何,由于您没有为out_file打开任何文件,因此它不会写入您想要的任何文件。因此,看起来您的程序没有执行您想要的操作,只是返回了。
答案 1 :(得分:0)
您可以尝试使用system(“ pause / nul”);我在VS中进行提醒时会用到它,因为它们不会保持打开状态,但是我只在返回0之前放它们;所以我按下按钮后它们会关闭,但我认为它在任何地方都可以使用,请尝试一下。