【问题标题】:Console main Input控制台主输入
【发布时间】:2013-01-26 17:17:18
【问题描述】:

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

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

【问题讨论】:

  • 在 Windows 上? system("pause");...
  • &lt; 在 shell 中是特殊的(包括cmd.exe):它将输入从文件重定向到您的stdin(或std::cin),并且程序看不到 既不是&lt; 也不是文件名。
  • 或者更好,cin.ignore()cin.get()
  • @chris 我会将这些放在代码中的什么位置?
  • 为什么argc 会是 3?论据是什么?

标签: c++ input console


【解决方案1】:

如果您将程序称为revstr &lt; input.text,您的main() 函数将被调用(在通常的平台上):

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

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

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

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

因此文件名将以argv[1] 的形式提供。

前一种情况下的行为通常是由于命令 shell 造成的,它将 '

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

为此,您需要应用某种形式的引用或转义来禁用 shell 行为,例如 revstr "&lt;" input.txtrevstr \&lt; input.txt。但据我了解你来自哪里,你想要重定向。在这种情况下,忘记 argc 和 argv,只需从 std::cin 读取您的输入即可。

【讨论】:

  • 我还是有点困惑。我希望控制台单独读取“revstr
  • 那么你就不需要处理main()中的参数了。而是直接从 cin 读取要反转的字符串。
  • string temp,input,output, argv[3];//存储来自文件的输入,并获取哪个文件// int argc = 0, i = 0; ofstream out("output.txt");如果(argc == 3)
  • cin 会进入字符串数组吗?
  • std::cin 是标准输入流。您从中阅读,就像您在代码中阅读 in 一样。将cin &gt;&gt; string_to_reverse 用于空格分隔的字符串。使用getline(cin, string_to_reverse) 读取整行。
猜你喜欢
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多