Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我如何检测到输入正从文件中重定向?_C++_Redirect_Input - Fatal编程技术网

C++ 我如何检测到输入正从文件中重定向?

C++ 我如何检测到输入正从文件中重定向?,c++,redirect,input,C++,Redirect,Input,我写了一个程序,它接受它的第一个参数并反转字母。例如: revstr cat 将产生tac 现在,当文件被重定向到中时,我希望它能够工作。因此,如果filler.txt是一个包含“现在是所有好人来帮助他们国家的时候了!”的文件,那么: 但我不知道如何检测这种重定向正在发生 这就是我尝试过的——显然,这是不好的。我哪里做错了 int main(int argc, char* argv[]) { string temp,input,output;//store input from file, a

我写了一个程序,它接受它的第一个参数并反转字母。例如:

revstr cat
将产生
tac

现在,当文件被重定向到中时,我希望它能够工作。因此,如果filler.txt是一个包含“现在是所有好人来帮助他们国家的时候了!”的文件,那么:

但我不知道如何检测这种重定向正在发生

这就是我尝试过的——显然,这是不好的。我哪里做错了

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;
        }
    }
    else
        ReverseWord(argv[2]);


    }
    else
}
intmain(intargc,char*argv[]){
字符串temp,input,output;//存储文件中的输入,并获取哪个文件//
流输出(“output.txt”);
如果(argc==3)
{
if(ifstream(argv[2]))
{
输入=argv[2];
ifstream-in(输入);
while(in.good())
{
在>>温度;
反向沃德(临时);

cout您应该更改
main()
函数的定义,以便它接受从命令行传递的参数:

int main(int argc, char* argv[])
第一个变量将保存提供的命令行参数数量,第二个变量是向量,其元素是指向以NULL结尾的字符串的指针。这些字符串本身就是命令行参数。请记住,第一个字符串始终是可执行文件的名称

例如,假设要打开的文件的名称将作为第一个参数传递:

int main(int argc, char* argv[])
{
    std::string filename;
    if (argc > 1)
    {
        // Oh, there's some command line arguments here...
        filename = argv[0];
    }

    // Go on processing...
}

您应该更改
main()
函数的定义,以便它接受从命令行传递的参数:

int main(int argc, char* argv[])
第一个变量将保存提供的命令行参数数量,第二个变量是向量,其元素是指向以NULL结尾的字符串的指针。这些字符串本身就是命令行参数。请记住,第一个字符串始终是可执行文件的名称

例如,假设要打开的文件的名称将作为第一个参数传递:

int main(int argc, char* argv[])
{
    std::string filename;
    if (argc > 1)
    {
        // Oh, there's some command line arguments here...
        filename = argv[0];
    }

    // Go on processing...
}

您有两种可能的方法(您甚至可以同时支持这两种方法):

  • 您可以接受文件名作为命令行参数(使用接受参数的main),然后使用此文件名作为要读取的流打开ifstream。用户使用您的程序,如
    revstr filename.txt
  • 您可以从std::cin读取输入。然后用户需要使用重定向向您传递文件的内容。如果您的程序是使用以下命令启动的:
    revstr
    ,则从std::cin读取将读取文件的内容。程序甚至看不到文件名

  • 如果您得到一个参数,您可以通过从ifstream读取,如果您没有得到一个参数,您可以通过从cin读取来支持这两种方法。执行读取的函数可以将蒸汽作为通用的istream传递进来&。

    有两种可能的方法供您使用(您甚至可以同时支持这两种方法):

  • 您可以接受文件名作为命令行参数(使用接受参数的main),然后使用此文件名作为要读取的流打开ifstream。用户使用您的程序,如
    revstr filename.txt
  • 您可以从std::cin读取输入。然后用户需要使用重定向向您传递文件的内容。如果您的程序是使用以下命令启动的:
    revstr
    ,则从std::cin读取将读取文件的内容。程序甚至看不到文件名


  • 如果你得到一个参数,你可以通过从ifstream读取来支持,如果你没有得到一个参数,你可以通过从cin读取来支持。进行读取的函数可以将蒸汽作为一个通用的istream传入&。

    你在哪里卡住了?你想知道如何测试文件是否存在吗?注意
    std::reverse
    @chris我假设这是开始编程的一项任务。如果您只使用
    ;,则无需学习。用户键入“revstr”(此处的名称或word)直接进入console@Mario,可能吧,但如果继续,最好知道外面有什么。你被困在哪里了?你想知道如何测试文件是否存在吗?注意
    std::reverse
    @chris我想这是开始编程的一个任务。如果你只使用
    ;)没有什么可学的,那么用户类型呢在“revstr<(此处的名称或单词)”中直接输入console@Mario,可能吧,但如果继续,最好知道外面有什么。main函数会自动计算参数并将每个参数放入数组的一部分吗?当然,不是main函数自己做的,但是是的,您可以假设当
    main()时
    已输入,所有内容都已设置好。请记住数组的第一个条目是可执行文件的名称,因此
    argc
    将始终大于0。第一个命令行参数(如果存在)将具有索引1。谢谢您,我得到了它。我可以测试第三个参数是否为1(因为这就是文件名所在的位置)并测试它是否存在。如果存在,我将打开并从它的内容中提取,如果第三个参数是单词。它将测试并看到文件不存在,然后继续。@MagicalToast:没错。祝您好运!:-)我得到一个奇怪的错误。我的函数接受一个字符串。所以假设用户输入“revstrmain()时
    已输入,所有内容都已设置好。请记住数组的第一个条目是可执行文件的名称,因此
    argc
    将始终大于0。第一个命令行参数(如果存在)将具有索引1。谢谢您,我得到了它。我可以测试第三个参数是否为1(因为这是文件名的位置)并测试它是否存在。如果存在,我将