我发现这段代码是 bash 自动完成的。但是,这对我来说看起来很奇怪。如果我根本不喜欢运行代码怎么办。如果我想输入./a.out
空格(不输入),然后按 Tab,我只想看到两个选项apple
,cherry
如果我输入a
并按 Tab,它会自动完成该选项apple
,类似c
. 假设只有两个选项之一是可以接受的:
./a.out apple
./a.out cherry
其中apple
和cherry
是选项,而不是目录中文件的名称。在第一种情况下,我想要your option is apple
在第二种情况下的程序类型your option is cherry
。在任何其他情况下,程序应该打印一个选项无效的错误。
我在 Internet 上找到的所有示例(例如以下示例)看起来都应该首先运行程序,然后它会做出反应。函数内部的 while 循环main
与程序的正常功能发生冲突。我误解了readline
图书馆吗?是否可以通过编辑以下代码来实现上述应用程序?
// sudo apt-get install libreadline-dev
// g++ -std=c++11 main.cpp -lreadline
#include <iostream>
#include "readline/readline.h"
#include "readline/history.h"
using namespace std;
int main(int argc, char** argv)
{
const char *line;
while ((line = readline("? ")) != nullptr) {
cout << "[" << line << "]" << endl;
if (*line) add_history(line);
free(line);
}
// if(argc!=2)
// {
// cout<<"<exe> one_parameter"<<endl;
// return 1;
// }
// string option=argv[1];
// if(option=="apple" || option=="cherry")
// cout<<"Your option is "<<option<<endl;
// else
// {
// cout<<"Error: invalid option "<<option<<endl;
// return 1;
// }
return 0;
}