ОК Я создаю программу, которая позволяет вводить пользователя в любом порядке. Термин -1 или -2 используется для указания режима работы. в то время как аргумент -c всегда предшествует имени файла. Вот цикл, который я написал, чтобы они были введены в любом порядке, который пожелает пользователь.Обработка аргументов командной строки, допустимых для любого порядка
int main(int argc, char *argv[])
{
string qcolors_name;
string inputFileName;
pmode_t mode = run_process2;
// perform command line argument checking
if(argc < 2){
cerr << "Not enough arguments" << endl;
return 0;
}
for(int i = 1; i < argc - 1; i++){
if(argv[i] == "-1"){
mode = run_process1;
cout << "Mode 1" << endl;
}else if(argv[i] == "-2"){
mode = run_process2;
}else if(argv[i] == "-c"){
qcolors_name = argv[i+1];
cout << qcolors_name << endl;
i++;
}else if(argc-1 == i){
break;
}else{
cout << argv[i] <<endl;
cerr << "arguments error"<<endl;;
return 0;
}
}
Однако программа, кажется, всегда разгружать в сообщении об ошибке аргументы, даже если он выводит, что ARGV [I] есть = -1. Это одна из вещей, которые я тестировал, хотя и никогда не должен был доходить до этого случая. Я уверен, что это что-то синтаксическое, что я делаю неправильно.
РЕДАКТИРОВАТЬ
Вот Imput с выходом ошибки выборки.
USER> ./colorfun -1 -c qc_bw.txt mountains.ppm <- 9:46PM
-1
arguments error
Какова точная командная строка, которая не работает? –
Я добавил пример ввода и ошибку вывода, которую он в настоящее время дает мне. –
Я делаю, если аргумент argc-1 == i игнорирует последний вход. Извините, я добавлю, что последний вход также всегда является именем файла. Его отказ от -1. Как вы можете видеть из выходной ошибки, так как она печатает текущий аргумент прямо перед выдачей ошибки. Упс, это также объясняется тем фактом, что сам цикл не проверяет последнюю запись. –