问题已经解决,代码重写如下:
#include <iostream>
#include <string>
#include <vector>
int main(int argc, char** argv){
std::string input;
std::vector<std::string> inputVector;
while(std::getline( std::cin, input ) ){
inputVector.push_back(input);
}
for(int i = 0; i < inputVector.size(); i++){
std::cout << i << " of " << inputVector.size()-1 << " is " << inputVector[i] << "\n";
}
return 0;
}
稍微说一下,CMD和Powershell中的输出在视觉上是不同的 - 看起来在Powershell中有两条终点线(也就是说,每条线之间都有一条空白线),我怀疑(但是没有调查过这是因为在Powershell行的末尾有很多空格,所以当你在前面加上"xx of xx is "
时,行会换行。
==================== ORIGINAL = QUESTION = BENEATH = THIS =行=============== =====
此代码应该只打印所有参数:
//dirparser.cpp
#include <iostream>
int main(int argc, char** argv){
for( int i = 0; i<argc ; i++){
std::cout << i << " of " << argc-1 << " is " << argv[i] << "\n";
}
return 0;
}
它似乎运行正常 - 如果我打电话,例如
dirparser.exe a b c
输出符合预期:
0 of 3 is dirparser.exe
1 of 3 is a
2 of 3 is b
3 of 3 is c
但是当我这样做时,在命令行中:
dir | dirparser.exe //In CMD
dir | .\dirparser.exe //In Powershell
ls | .\dirparser.exe //In Powershell
我得到的输出是:
0 of 0 is dirparser.exe //CMD
0 of 0 is [directory]\dirparser.exe //Powershell
0 of 0 is [directory]\dirparser.exe //Powershell
没有更进一步。
这不是因为dir
和/或ls
没有返回任何内容 - 在没有管道的情况下单独调用这些命令会像往常一样给我文件结构。我怀疑我错过了一些必要的东西 - 可能是关于管道行为 - 但我对于应该从哪里开始我一无所知。
答案 0 :(得分:3)
管道传递stdin到命令,而不是命令行参数。你需要使用stdin读取'pipe'。
答案 1 :(得分:2)
答案 2 :(得分:1)
您使用命令行处理器 - 这是一个相当复杂的用户命令解释器。所以这个解释器有一套规则 - 一些规则描述了如何启动你的程序,但是一些规则修改了命令行处理器的行为。 |
,&
,>
,<
是解释程序的命令,但不适用于您的程序。这就是为什么它不被视为命令行参数。但您可以在引号的帮助下传递|
:
myprog "arg1 | arg2"
但在这种情况下,它不是流的管道