2013-10-22 106 views
4

我想編寫一個簡單的Bash腳本來編譯我的C++代碼,在這種情況下,它是一個非常簡單的程序,它只是將輸入讀入向量,然後打印矢量的內容。從Bash管道輸入到C++ cin

C++代碼:

#include <string> 
    #include <iostream> 
    #include <vector> 

    using namespace std; 

    int main() 
    { 
     vector<string> v; 
     string s; 

     while (cin >> s) 
     v.push_back(s); 

     for (int i = 0; i != v.size(); ++i) 
     cout << v[i] << endl; 
    } 

bash腳本run.sh:

#! /bin/bash 

    g++ main.cpp > output.txt 

讓編譯我的C++代碼,並創建的a.out和output.txt的(裏面是空的,因爲沒有輸入)。我嘗試了一些使用「input.txt <」的變體,但沒有運氣。我不知道如何將我的輸入文件(只是一些隨機單詞的簡短列表)輸入到我的C++程序的cin中。

+1

那麼,至少它編譯。這比這個網站上的大多數要好。 – WhozCraig

+0

[用C++讀取管道輸入](http://stackoverflow.com/questions/5446161/reading-piped-input-with-c?rq=1) –

+2

cat「input.txt」| ./a.out> output.txt –

回答

6

你必須先編譯程序來創建一個可執行文件。然後,您運行可執行文件。與腳本語言的解釋器不同,g++不解釋源文件,但編譯源以創建二進制映像。

#! /bin/bash 
g++ main.cpp 
./a.out < "input.txt" > "output.txt" 
4

g++ main.cpp編譯它,編譯的程序然後被稱爲'a.out'(g ++的默認輸出名稱)。但爲什麼你會得到編譯器的輸出? 我想你想要做的是這樣的:

#! /bin/bash 

# Compile to a.out 
g++ main.cpp -o a.out 

# Then run the program with input.txt redirected 
# to stdin and the stdout redirected to output.txt 
./a.out <input.txt> output.txt 

也爲Lee Avital建議適當管道從文件中輸入:

cat input.txt | ./a.out > output.txt 

第一隻是重定向,不是技術上的管道。你可能喜歡在這裏閱讀David Oneill的解釋:https://askubuntu.com/questions/172982/what-is-the-difference-between-redirection-and-pipe

+0

感謝您的鏈接,我不知道兩者之間的區別。 – Tyler