리눅스면 getopt 함수 쓰면 금방 해결되는데, <div>윈도우즈 콘솔 프로그램에서는 다들 어떻게 코드를 짜시는지 궁금합니다.</div> <div><br></div> <div>저는 이렇게 만드는데요,</div> <div>에러 핸들링 쪽이 좀 취약한 거 같아서 말입니다.</div> <div><br></div> <div>예) input file이 1개, output file이 하나 (test.exe -i inputfile.txt -o outputfile.txt) </div> <div><br></div> <div>enum</div> <div>{</div> <div> CLO_START, CLO_INPUT, CLO_OUTPUT, CLO_ERROR, CLO_END</div> <div>};</div> <div><br></div> <div><br></div> <div><div><span class="Apple-tab-span" style="white-space:pre;"> </span>string inputFileName;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>string outputFileName;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>ifstream inputFile;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>ofstream outputFile;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int state = CLO_START;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int argIndex = 1;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>// command line argument check</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (argc != 5)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//cout << argc << endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>USAGE(argv[0]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return -1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>// command line argument parsing</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (state != CLO_END)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>switch (state)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case CLO_START:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (argIndex >= 5)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_END;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else if (argv[argIndex][0] == '-')</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (argv[argIndex][1] == 's')</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>argIndex++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_INPUT;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else if (argv[argIndex][1] == 'o')</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>argIndex++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_OUTPUT;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_ERROR;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case CLO_INPUT:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (argv[argIndex][0] != '-')</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout << "Input filename: " << argv[argIndex] << endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>// get input filename</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>inputFileName = string(argv[argIndex]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout << "Copied to string inputFileName: " << inputFileName << endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//inputFile.open(inputFileName.c_str());</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>argIndex++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//argIndex++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_START;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_ERROR;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case CLO_OUTPUT:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (argv[argIndex][0] != '-')</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>// get output filename</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout << "output filename: " << argv[argIndex] << endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>outputFileName = string(argv[argIndex]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout << "Copied to string outputFileName: " << outputFileName << endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>argIndex++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_START;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_ERROR;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case CLO_ERROR:</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cerr << "Unknown option" << endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>USAGE(argv[0]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return -1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_END;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>default: </div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>state = CLO_END;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.