除了system(“ pause”)以外,还有没有其他选项可以使可执行文件保持打开状态?

时间:2019-09-17 01:03:22

标签: c++ system caesar-cipher pause

我试图通过理解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;
}

预期结果是在解密代码时应用程序保持打开状态。

2 个答案:

答案 0 :(得分:0)

您实际上并没有将ofstream指向任何地方。据我所知,ofstream将缓冲输入,直到您将其指定给某个要指向的地方(免责声明,我可能是错误的)。

无论如何,由于您没有为out_file打开任何文件,因此它不会写入您想要的任何文件。因此,看起来您的程序没有执行您想要的操作,只是返回了。

答案 1 :(得分:0)

您可以尝试使用system(“ pause / nul”);我在VS中进行提醒时会用到它,因为它们不会保持打开状态,但是我只在返回0之前放它们;所以我按下按钮后它们会关闭,但我认为它在任何地方都可以使用,请尝试一下。