Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Alexoy
5 / 5 / 0
Регистрация: 07.07.2010
Сообщений: 80
#1

Выполнение программы в терминале с поддержкой ключей с аргументами - C++

07.07.2010, 13:00. Просмотров 1741. Ответов 16
Метки нет (Все метки)

Подскажите пожалуйста или дайте ссылку если это уже было на форуме..
как сделать выполнение программы в терминале с поддержкой ключей с аргументами.

Например:
# prog -s 12 -n 5
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2010, 13:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выполнение программы в терминале с поддержкой ключей с аргументами (C++):

Простые программы (генератор ключей) - C++
Подскажите, пожалуйста, как в в программке сделать так, чтобы в ней под каждым новым вызовом вводилось новое число или буква (заглавная или...

Выполнение программы - C++
Привет, я только начал изучать C++. По книге "Язык программирования С" Кернигана Б., Ритчи Д. Первая программа, которую я пытался...

Неправильное выполнение программы - C++
Задание: В одномерном массиве, состоящем из n вещественных элементов, вычислить: • номер минимального элемента массива; • сумму...

Некорректное выполнение программы - C++
Суть проблемы: при выполнении программы выдаются корявые значения (-1.INF). Понимаю, что в программе где-то допущена ошибка, но сам уже...

Выполнение программы в облаке - C++
Доброго времени суток. Возник вопрос- могу ли я, обычный пользователь ПК, отправить свою программу (exe-файл) куда-то в облако для...

Зациклить выполнение программы - C++
Помогите,как сделать чтобы при завершении программы, при нажатии определенной кнопки она начинала работать снова. Т.е. чтобы не...

16
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,190
Записей в блоге: 29
07.07.2010, 17:29 #2
Распечатает все аргументы командной строки

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int
main (int argc, char **argv)
{
  int i;
 
  for (i = 0; i < argc; i++)
    printf ("%s\n", argv[i]);
 
  return 0;
}
0
Alexoy
5 / 5 / 0
Регистрация: 07.07.2010
Сообщений: 80
08.07.2010, 18:12  [ТС] #3
А отличается чем-то **argv от *argv[]?
0
easybudda
Модератор
Эксперт CЭксперт С++
9728 / 5679 / 972
Регистрация: 25.07.2009
Сообщений: 10,929
08.07.2010, 19:42 #4
Alexoy, **argv на 1 символ короче
0
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,190
Записей в блоге: 29
08.07.2010, 20:07 #5
Цитата Сообщение от Alexoy Посмотреть сообщение
А отличается чем-то **argv от *argv[]?
Это одно и то же. Вторая запись концептуально более правильная. Первая - более распространённая
0
Alexoy
5 / 5 / 0
Регистрация: 07.07.2010
Сообщений: 80
08.07.2010, 20:08  [ТС] #6
EASYBUDDA.. Это в корне всё меняет

А вот.. я сделал, допустим, что после определённого ключа выводится следующее слово (просто cout). Если мне надо вывести несколько слов как одно целое - их пишу в одинарных кавычках.. или в обычных кавычках. Но - если при обычных кавычках во фразе есть знак "!", то выводится:

bash: !": event not found

Да.. возможно так и должно быть, но можно это избежать как-то? При одинарных кавычках всё нормально.. символ как символ воспринимается
0
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,190
Записей в блоге: 29
08.07.2010, 20:14 #7
Цитата Сообщение от Alexoy Посмотреть сообщение
Но - если при обычных кавычках во фразе есть знак "!", то выводится:
bash: !": event not found
Это фича командного интерпретатора (в твоём случае bash). Специальные символы надо экранировать

Код
$ ./myprog abc "edf" "g\!e"
0
Alexoy
5 / 5 / 0
Регистрация: 07.07.2010
Сообщений: 80
08.07.2010, 20:17  [ТС] #8
Но тогда "word\!" и выводится как word\! . Может отфильтровать из вывода как-то обратный слеш?
0
easybudda
Модератор
Эксперт CЭксперт С++
9728 / 5679 / 972
Регистрация: 25.07.2009
Сообщений: 10,929
08.07.2010, 20:19 #9
Alexoy, заключайте параметры в одинарные ковычки и голову себе не морочьте...
0
Alexoy
5 / 5 / 0
Регистрация: 07.07.2010
Сообщений: 80
08.07.2010, 20:22  [ТС] #10
Так это Я.. но не объяснять же потом всем подряд правописание команд да и наверняка это не так сложно сделать?!
0
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,190
Записей в блоге: 29
08.07.2010, 20:30 #11
Alexoy, и тем не менее. От твоей программы это не зависит. В каком виде попадут аргументы (ты их называешь "ключи") в программу зависит только от командного интерпретатора.

Пр слэш перед восклицательным знаком - значит я ошибся. Но на память тогда не скажу, как правильно, надо экспериментировать. Как вариант напиши одинарные кавычки, как предложено выше
0
Alexoy
5 / 5 / 0
Регистрация: 07.07.2010
Сообщений: 80
08.07.2010, 21:12  [ТС] #12
Хотя, я подумал, зачем фильтровать слеш если его там не должно быть?! ну ладно - одинарные так одинарные

Добавлено через 6 минут
ещё момент.. в каком виде данные возвращает argv[]? Как уже убедился - складывать значения сразу нельзя - это не числа (ну это понятно), но это и не строка - strlen() не работает. что-то такое выдаёт:

error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘size_t strlen(const char*)’

"char" ведь одиночный символ, разве нет?
0
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,190
Записей в блоге: 29
08.07.2010, 21:27 #13
Что-то я вопроса не поянял. argv - это указатель на массив, элементами которого являются указатели на строки (char'ы)

Добавлено через 52 секунды
Тут рисунок бы хорошо нарисовать, да я вот рисовать не умею на фотошопе
0
Alexoy
5 / 5 / 0
Регистрация: 07.07.2010
Сообщений: 80
08.07.2010, 21:31  [ТС] #14
т.е. Допустим надо узнать длину вписанного ключа/аргумента.. Но strlen() не работает как у простой строки. Наверное совсем не о том я говорю..?! не опытный я)
0
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,190
Записей в блоге: 29
08.07.2010, 21:35 #15
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int
main (int argc, char **argv)
{
  int i;
 
  for (i = 0; i < argc; i++)
    printf ("arg=%s, len=%d\n", argv[i], strlen (argv[i]));
 
  return 0;
}
Или я что-то не так вопрос понимаю?
0
08.07.2010, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2010, 21:35
Привет! Вот еще темы с ответами:

Прерывается выполнение программы - C++
Подсчитать сумму элементов, расположенных между первым максимальным и последним минимальными элементами. Если максимальный элемент...

opendialog блокирует выполнение программы - C++
Пишу программу, краткое ее описание: есть главная форма, на ней нажимаем кнопку &quot;Старт&quot;, начинается обработка данных с COM порта, нажимаем...

Выполнение программы через функцию - C++
Задание: Ввести массивом 10 , 8 ,6 чисел и узнать кол-во положительных и отрицательных.Скажите, как сделать программу, чтобы она выполняла...

Не происходит полное выполнение программы - C++
Всем привет. Только только начал изучать программирование и сразу проблема, которую не удалось нагуглить. Итак, написал код программы....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.