2013-12-12 31 views
1

的問題已經解決了,代碼重寫如下:管道和命令行參數

#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 = LINE ================ ====

此代碼應只打印所有參數:

//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什麼都不返回 - 單獨調用那些沒有管道的命令給我的文件結構照常。我懷疑我錯過了一些必不可少的東西 - 可能是關於管道的行爲 - 但我對我應該從哪裏開始毫無頭緒。

+2

管道沒有通過命令行參數的管道。 – chris

回答

2

管道不適用於參數,但是標準輸入。

如果你想閱讀LSDIR到程序發送數據,你需要閱讀流:std::cin

一個基本的C++示例:here

+0

謝謝,看起來這個例子回答了我所有的問題。 – medivh

3

管道將標準輸入傳遞到命令,而不是命令行參數。你需要使用stdin讀取'pipe'。

+0

太好了,謝謝。此外,顯然爲了防止垃圾郵件,我不允許對每15秒鐘超過一個人表示感謝,所以現在我打字打發時間。美好時光。 – medivh

+0

你知道這是否可以在相反的方向工作 - 也就是說,有沒有辦法將'dir'或其他命令寫入std :: out並以這種方式調用命令? (這個簡單的解決方案,'std :: cout <<「dir」;''''和'std :: cout <<「dir \ n」;'看起來不適合這個) – medivh

+0

等等,不,這只是''的'system()'命令,忘了我問了。 – medivh

1

您使用命令行處理器 - 這是比較複雜的用戶命令解釋器。所以這個解釋器有一套規則 - 一些規則描述瞭如何啓動你的程序,但是一些規則修改了命令行處理器的行爲。 |,&,>,<是解釋程序的命令,但不適用於您的程序。這就是爲什麼它不被視爲命令行參數。但是你可以通過|引號的幫助:

myprog "arg1 | arg2" 

但在這種情況下,沒有流