【问题标题】:How do I read input .in files in command line on windows如何在 Windows 的命令行中读取输入 .in 文件
【发布时间】:2017-12-05 15:28:24
【问题描述】:

我完成了我的代码,但问题是我不知道如何根据给出的说明对其进行测试。

讲师为我们提供了3 输入文件,如下所示:

33 20
5  7 
18 15

我应该获取这些值并使用这些存储的值创建事件对象。问题是讲师在Ubuntu 上给出了测试方法,她展示了如何在命令行中输入文件,例如:

 ./sApp < simulationShuffled3.in

所以我真的很困惑我应该如何让它工作。我目前正在使用带有终端附件的 Windows 控制台、VStudios 和 sublime text。

我目前使用的代码来自我的课程笔记中的示例

while (getline(cin >> ws, aLine)) {   // while (there is data)
    stringstream ss(aLine);
    ss >> arrivalTime >> processingTime;
    Event newEvent = Event('A',arrivalTime,processingTime);
    eventPriorityQueue.enqueue(newEvent);
}

【问题讨论】:

  • 你能不能也看看我的回答,自从我第一次发帖以来,我已经纠正了一些错误

标签: c++ powershell cmd


【解决方案1】:

在 Windows [和/或] Linux 中从 stdin 读取输入

您可以通过三种方式做到这一点:

  1. 在命令提示符下(Windows)
  2. 在 Powershell (windows/linux) 中
  3. 在 WSL 和 Linux 中

1:在 Windows Cmd 中

type input.in | python file_requiring_input.py              # in python

type input.in | go run file_requiring_input.go              # in go

type input.in | node file_requiring_input.js                # in js

javac file_requiring_input.java && 
type input.in | java file_requiring_input                   # in java

g++ file_requiring_input.cpp && 
type input.in | a.exe                                       # in cpp

gcc file_requiring_input.c && 
type input.in | a.exe                                       # in c

另一种方式

python file_requiring_input.py < input.in                   # in python

g++ file_requiring_input.cpp && 
a.exe < input.in                                            # in cpp

2:在 Powershell 中

gc .\input.in | python file_requiring_input.py              # in python

g++ .\file_requiring_input.cpp ; 
gc .\input.in | .\a.exe                                     # in cpp

gcGet-Content 的缩写。 gc 的其他别名是 cattype。 这意味着所有三个名称都可以用作替换或gc

3: 使用wsl for windows //Linux 命令

cat input.in | python file_requiring_input.py                # in python

g++ file_requiring_input.cpp && 
cat input.in | ./a.out                                       # in cpp

另一种方式

python file_requiring_input.py < input.in                    # in python

g++ file_requiring_input.cpp && 
./a.out < input.in                                           # in cpp

已经编辑了测试所有内容的代码。如果我错了或要添加更多内容,请纠正我。 此外,input.in 更普遍地是一个文本文件,因此您可以根据需要创建 input.txt 文件,并且它的工作方式相同

【讨论】:

  • 希望对您有所帮助
【解决方案2】:

好吧,由于这是一项作业,我不会为您提供现成的代码。相反,我只会为您指明正确的方向。

在 Windows 中,您可以在 Command Prompt 上为您的可执行文件提供由空格分隔的参数,如下所示:

C:\Assignment> Test.exe file1.in file2.in file3.in

而且,它也适用于 Ubuntu

所以,你需要学习Command Line ArgumentsFile Handling,从文件中读取;而且,您必须将从文件中读取的这些字符串转换为整数。

命令行参数: http://en.cppreference.com/w/c/language/main_function

文件处理: http://en.cppreference.com/w/cpp/io/basic_fstream

这是一个从文件中读取的最小示例 (std::ifstream):

我在C:\Test\Test.txt 有一个测试文件,内容如下:

11 22
12 23
23 34

这里是main.cpp 来测试它:

#include <iostream>
#include <fstream>
#include <string>

int main( int argc, char *argv[] )
{
    const std::string filename { R"(C:\Test\Test.txt)" };

    std::ifstream ifs { filename };
    if ( !ifs.is_open() )
    {
        std::cerr << "Could not open file!" << std::endl;
        return -1;
    }

    int arrivalTime    { 0 };
    int processingTime { 0 };

    while ( ifs >> arrivalTime >> processingTime )
    {
        std::cout << "Arrival Time : " << arrivalTime << '\n'
                  << "Processing Time : " << processingTime << std::endl;
    }

    ifs.close();
    return 0;
}

输出:

到达时间:11
处理时间:22
到达时间:12
处理时间:23
到达时间:23
处理时间:34

【讨论】:

  • 我遵循了我课程中的一个示例代码,它涉及使用 stringstream ss(aLine),它涉及相同类型的输入文件方法。我之前在考虑参数,但使用的代码根本没有真正使用它,也许我应该为这个解决方案寻找一些其他资源
  • @Lawdevo:请将此代码也添加到您的问题中。现在,您不必使用cin,因为您将在文件中使用reading。而且,由于您只是阅读,您可以使用std::ifstream
  • @Lawdevo:我用std::ifstream 的例子更新了我的答案。您不必使用std::sstream
  • 它并没有真正解决我的问题,但这是我正在考虑的想法之一,很高兴我对它有某种代码洞察力。原来我只需要使用代码中的 stringStream/getline 在命令行中执行 sApp.exe
  • @Lawdevo:当然。一点问题都没有!
猜你喜欢
  • 2014-03-31
  • 2015-12-06
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多