如何在 C/C++ 中通过命令行传递输入(不是参数)?
How to pass inputs (not arguments) thorugh command line in C/C++?
假设我有以下简单的 C++ 程序,
#include <bits/stdc++.h>
using namespace std;
int main() { //no argv or argc allowed
cin >> t;
while(t--) {
int n;
cin >> n;
// do whatever
}
}
并在终端中输入以下命令:
g++ -std=c++17 -O2 -lm b.cpp && ./a.out
当我 运行 这个命令时,它会要求我输入,我必须像下面这样复制并粘贴输入:
7
1 2
2 4
2 6
7 5
3 6
4 6
7 2
有没有办法一次性完成?我不介意每次都复制和粘贴,但是我正计划制作一个 shell 脚本来为我自动执行此操作。基本上,它获取存储在远程 HTTP 服务器中的输入,然后通过 C++ 程序传递它。需要注意的是,出于某种原因我不允许写文件,所以我不能 fstream/freopen.
一种方法是使用 bash process substitution 从命令创建“文件”。然后将该文件重定向到程序。
示例:
#!/bin/bash
data="
7
1 2
2 4
2 6
7 5
3 6
4 6
7 2
"
./a.out < <(echo ${data})
请注意,data
字符串在这种情况下并不是真正的多行,但您所显示的程序不需要它。
进程替换不是执行此操作的正确方法。使用 heredoc:
g++ -std=c++17 -O2 -lm b.cpp && ./a.out << EOF
7
1 2
2 4
2 6
7 5
3 6
4 6
7 2
EOF
假设我有以下简单的 C++ 程序,
#include <bits/stdc++.h>
using namespace std;
int main() { //no argv or argc allowed
cin >> t;
while(t--) {
int n;
cin >> n;
// do whatever
}
}
并在终端中输入以下命令:
g++ -std=c++17 -O2 -lm b.cpp && ./a.out
当我 运行 这个命令时,它会要求我输入,我必须像下面这样复制并粘贴输入:
7
1 2
2 4
2 6
7 5
3 6
4 6
7 2
有没有办法一次性完成?我不介意每次都复制和粘贴,但是我正计划制作一个 shell 脚本来为我自动执行此操作。基本上,它获取存储在远程 HTTP 服务器中的输入,然后通过 C++ 程序传递它。需要注意的是,出于某种原因我不允许写文件,所以我不能 fstream/freopen.
一种方法是使用 bash process substitution 从命令创建“文件”。然后将该文件重定向到程序。
示例:
#!/bin/bash
data="
7
1 2
2 4
2 6
7 5
3 6
4 6
7 2
"
./a.out < <(echo ${data})
请注意,data
字符串在这种情况下并不是真正的多行,但您所显示的程序不需要它。
进程替换不是执行此操作的正确方法。使用 heredoc:
g++ -std=c++17 -O2 -lm b.cpp && ./a.out << EOF
7
1 2
2 4
2 6
7 5
3 6
4 6
7 2
EOF