首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制台主输入

控制台主输入
EN

Stack Overflow用户
提问于 2013-01-27 01:17:18
回答 1查看 398关注 0票数 2

好吧,有些人可能记得我之前,我是编程新手,所以我可能看起来没有达到许多其他人的水平。然而,目前,我被卡住了。

代码语言:javascript
复制
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作为文件名来颠倒从文件中获取的单词的字母顺序。然而,目前程序只是立即打开和关闭,没有任何事情发生,也没有任何输入到控制台中。有人知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2013-01-27 01:38:40

如果你以revstr < input.text的身份调用你的程序,你的main()函数将会被调用(在通常的平台上):

代码语言:javascript
复制
argv = { "revstr", NULL }
argc = 1

在本例中,通过读取std::cin获取input.txt的内容。这就是“输入重定向”的意思:您的标准输入流被重定向为从文件读取,而不是从键盘(也称为终端)设备读取。在这种情况下,不需要处理文件名。

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

代码语言:javascript
复制
argv = { "revstr", "input.txt", NULL }
argc = 2 

因此,文件名将作为argv[1]可用。

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

代码语言:javascript
复制
argv = { "revstr", "<", "input.txt", NULL }
argc = 3 

为此,您需要应用某种形式的引号或转义来禁用外壳行为,例如revstr "<" input.txtrevstr \< input.txt。但据我所知,你想要重定向。在这种情况下,忘记argc和argv,只需从std::cin读取输入即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14539420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档