Я нашел этот код как автозаполнение bash. Но это выглядит странно для меня. Что делать, если я не люблю запускать код вообще. Если я хочу набрать ./a.out
, затем пробел (без ввода), а затем нажать клавишу табуляции, я хотел бы видеть только две опции apple
и cherry
, и если я наберу a
и нажму клавишу табуляции, то автозаполнение опция apple
и аналогично для c
. Допустим, приемлем только один из двух вариантов:
./a.out apple
./a.out cherry
, где apple
и cherry
- это параметры, а не имена файлов в каталоге. В первом случае я хотел бы, чтобы типы программ были your option is apple
, а во втором - your option is cherry
. В любом другом случае программа должна вывести ошибку, указав, что параметр недействителен.
Все примеры, которые я нахожу в Интернете, такие как следующее, выглядят так, что вы должны сначала запустить программу, а затем она реагирует. Цикл 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;
}