如何在Windows上的命令行中读取输入.in文件

时间:2017-07-02 03:56:59

标签: c++

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

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

  

33 20

     

5 7

     

18 15

左边是假设的到达时间
右边是处理时间

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

uname@hostname: ~$ ./sApp < simulationShuffled3.in

所以我真的很困惑我是怎么想让它运转起来的。我目前正在使用Windows控制台,VStudios和带有终端附件的sublime文本。

我知道对大多数人来说这是一个非常愚蠢的问题,但我不知道该怎么做。感谢阅读,我希望我能尽快得到回复。

我正在使用的代码是我的课程笔记中的一个例子

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

这包含在主要内容中 并且main看起来像int main(),它实际上并不包含任何argv,argc  它只包括

#include <iostream>

#include <sstream>

没有别的,没有fStream或任何东西。所以我真的不明白如何输入文件并阅读它

2 个答案:

答案 0 :(得分:1)

嗯,因为这是一项任务,我不打算为您提供现成的代码。相反,我只是指出你正确的方向。

在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

答案 1 :(得分:0)

在 Windows 和 Linux 中从终端读取输入

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

  1. 在命令提示符(Windows)中
  2. 在 Powershell 中
  3. 在 WSL 和 Linux 中
<块引用>

input.in 或 input.txt 或任何文件都可以

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
<块引用>

从这里开始只使用 python 和 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:windows 使用 wsl // Linux 终端

你可以为 windows 安装 wsl 并直接从你的 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

后者是linux中最常用的方式。


<块引用>

已编辑代码,希望能测试所有内容。如果我错了或者还有什么要补充的,请纠正我

<块引用>

通常 input.in 也是一个文本文件,因此您可以根据需要创建 input.txt 文件,并且效果相同