我正在寫一個程序,它從文本文件(C++代碼)中獲取輸入並將其修改爲在文本文件(html)中輸出。該程序需要從標準輸入讀取並寫入標準輸出。它使用命令行參數-i文件名輸入和-o文件名輸出以及shell輸入/輸出重定向。我對Linux相當陌生,不確定如何以有效的方式做到這一點。這是我到目前爲止:打開文件的I/O和使用命令行重定向
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <string.h>
#include <string>
using namespace std;
int main(int argc, char * argv[]) {
vector<string> mod;
int modNum = 0;
int i = 1;
string input = "";
string inFilename = "";
string outFilename = "";
ifstream inFile;
ofstream outFile;
while(i < argc){
if (strcmp(argv[i],"-i") == 0) {
i++;
if (i<argc){
inFilename = argv[i];
} else {
cout << "\t-i require a filename for input" << endl;
}
i++;
} else if (strcmp(argv[i],"-o") == 0) {
i++;
if (i<argc){
outFilename = argv[i];
} else {
cout << "\t-i require a filename for output" << endl;
}
i++;
}
}
if (inFilename != "") {
inFile.open(inFilename.c_str());
}
if (outFilename != "") {
outFile.open(outFilename.c_str());
}
if (inFile.is_open() and outFile.is_open()) {
outFile << "<script src=\"https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\"></script>" << endl;
outFile << "<pre class=\"prettyprint\">" << endl;
while (!inFile.eof()) {
getline(inFile, input);
outFile << input << endl;
}
outFile << "</pre>";
} else {
cout << "<script src=\"https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\"></script>" << endl;
cout << "<pre class=\"prettyprint\">" << endl;
while (cin) {
if (getline(cin,input)) {
cout << input << endl;
}
}
cout << "</pre>";
}
inFile.close();
outFile.close();
}
我遇到的問題是沒有這種方法的多功能性。如果我得到
./c < code.cpp -o page.html
或
./c -i code.cpp > page.html
程序將無法正常執行。我道歉,如果有任何小錯誤,我複製並粘貼代碼塊只顯示必需品。該程序將做更多,但現在我只是想讓輸入/輸出正常工作。
感謝您的回覆。我沒有把代碼放在每一個案例中,因爲它會非常草率,我知道我應該使用一個函數來處理,但即使在研究並試圖找到類似的程序之後,我也找不到一個有效的方法去處理它。你的回答更清晰,對我來說很合理,我會試試看。 – andyb