2

好吧,有些人可能还记得我之前的样子,我对编程还很陌生,所以我可能看起来比不上许多其他人。但是,此刻,我非常卡住。

int main(int argc, char* argv[]) {
    string temp,input,output;//store input from file, and get which file//

    ofstream out("output.txt");

    if(argc == 3)
    {
        if(ifstream(argv[2]))
        {
            input = argv[2];
            ifstream in(input);
            while(in.good())
            {
                in >> temp;
                ReverseWord(temp);
                cout << temp << endl;
                out << temp << endl;
            }
            out.close();
            in.close();
        }
    }

}

此处的代码旨在通过键入“revstr < input.txt”(其中 input.txt 为文件名)来反转从文件中获取的单词的字母顺序。但是目前程序只是立即打开和关闭,没有任何事情发生,也没有在控制台中输入任何内容。有谁知道如何解决这一问题?

4

1 回答 1

1

如果你调用你的程序作为revstr < input.text你的main()函数将被调用(在通常的平台上):

argv = { "revstr", NULL }
argc = 1

在这种情况下,您可以input.txt通过读取 std::cin 来获取 的内容。这就是“输入重新定向”的含义:您的标准输入流被重定向以从文件而不是键盘(又名终端)设备中读取。在这种情况下无需处理文件名。

要将文件名作为参数传递,请使用revstr input.txt. 那应该main()调用

argv = { "revstr", "input.txt", NULL }
argc = 2 

所以文件名将作为argv[1].

前一种情况的行为通常是由于命令 shell 将“<”视为重定向指令(结束前面的命令)。你可能期望得到

argv = { "revstr", "<", "input.txt", NULL }
argc = 3 

为此,您需要应用某种形式的引用或转义来禁用 shell 行为,例如revstr "<" input.txtor revstr \< input.txt。但据我了解你来自哪里,你想要重定向。在这种情况下,忘记 argc 和 argv 并简单地从std::cin.

于 2013-01-26T17:38:39.513 回答