|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
|||||||||||
Как экранировать знак умножения в CMD?05.10.2016, 01:34. Показов 10698. Ответов 14
Метки нет (Все метки)
Здравствуйте, форумчане!
Имеется бинарник (app.exe) программы, написанной на C. Допустим, что я хочу перемножить два числа в обратной записи, запуская программу и считывая арифметическое выражение из CMD. Например,
Добавлено через 4 часа 58 минут На Linux это делается довольно-таки просто (\* — экранирование звёздочки):
0
|
|||||||||||
| 05.10.2016, 01:34 | |
|
Ответы с готовыми решениями:
14
Не работает знак умножения! |
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|||||||||||
| 05.10.2016, 01:57 | |||||||||||
|
supinf,
Например выполняя все это непосредственно с помощью cmd, мне не приходиться зачем-то думать об экранировании знака умножения:
![]() Добавлено через 4 минуты Более того, без проблем работает и такая конструкция:
1
|
|||||||||||
|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
||||||||||||
| 05.10.2016, 02:45 [ТС] | ||||||||||||
|
Меня интересует что-нибудь из этой серии:
Может быть, команда есть для отключения функциональности звёздочки в CMD? Добавлено через 25 минут Открыл экранирование звёздочки методом тыка:
0
|
||||||||||||
|
Любознательный
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
|
|||||||||||||||||||
| 05.10.2016, 06:24 | |||||||||||||||||||
|
А вообще, в текстовом виде символ астериск не требует специального экранирования, за исключением тех случаев, где он целенаправленно используется в качестве спецсимвола: run.bat (строка запуска: run.bat)
Её следует записать так:
). Вы просто не знаете/не помните, что символ "%" следует удваивать в сценариях, чтобы использовать в качестве именно текстового символа %, иначе интерпретатор его просто "съесть". Да и то, в некоторых случаях и удваивание этого символа используется в качестве спецсимволов... в общем, это cmd и в двух словах всего ведь не описать, поэтому нужны конкретности.
1
|
|||||||||||||||||||
|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
|||||||
| 05.10.2016, 19:10 [ТС] | |||||||
0
|
|||||||
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
||
| 05.10.2016, 21:52 | ||
|
supinf,
Вам уже объяснили, астерикс в cmd не требует экранирования, лучше поясните что вы хотите от cmd, по-отношению к вашему коду и не только. Не по теме: И чем так астерикс насолил Добавлено через 4 минуты
0
|
||
|
Любознательный
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
|
||
| 05.10.2016, 22:26 | ||
|
В общем, чтобы решить задачу, её прежде необходимо правильно сформулировать, поэтому помочь Вам чем-либо пока трудновато, ибо непонятно, что же требуется получить в итоге.
0
|
||
|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
|||||||
| 05.10.2016, 22:41 [ТС] | |||||||
|
Во-вторых, я получил что хотел. Ну, если вы хотите подробностей, то милости просим: Моя программа считывает аргументы из CMD в массив char *argv[], если аргумент не число, то он проверяется на принадлежность к операторам с помощью условия в switch'e, например, case '*' (то есть оператор должен быть ASCII-символом с кодом, например, в восьмеричной системе \053), тогда pop() * pop(). Не по теме:
Добавлено через 9 минут Я думаю, что он интерпретирует "звездочку", как подстановочный символ (как в регулярных выражениях, например).
0
|
|||||||
|
Любознательный
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||||||
| 05.10.2016, 23:07 | ||||||||||
|
Т.е. говоря иначе, такой записью Вы заставляете интерпретатор выполнять вычисление выражения и после чего записать его значение в переменную, но для него это вовсе не математика, поэтому Вы просто получите ошибку. ![]()
0
|
||||||||||
|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
|||||
| 05.10.2016, 23:35 [ТС] | |||||
![]() Поэтому я считаю, что CMD как-то искажает астериск, либо он как-то нестандартно представлен в CMD. Добавлено через 3 минуты Меня интересует вопрос: как именно представлен астериск в CMD, и как можно изменить его представление в CMD, а не в моей программе.
0
|
|||||
|
|
||||||
| 05.10.2016, 23:44 | ||||||
Сообщение было отмечено supinf как решение
Решение
Так?
3
|
||||||
|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
||||||
| 06.10.2016, 00:23 [ТС] | ||||||
|
Dragokas, да, так. Оказалось, что дело в среде Code::Blocks 16.01 (возможно, включена какая-то опция в настройках компилятора GNU GCC или чего-то ещё, связанная с ASCII), в VS 2015 у меня тоже всё корректно работает. Хоть ваш ответ и отходит от первоначальной темы, но он реально лучший
![]() Добавлено через 18 минут Code::Blocks 16.01 вместо звёздочки выдаёт название файлов и папок, находящихся в директории проекта:
0
|
||||||
|
|
|||
| 06.10.2016, 00:33 | |||
|
Ну если прямо ответить, то есть разные правила передачи аргументов для:
1) из-под запущенного интерпретатора 2) из-под кода батника 3) просто в среде windows (через CreateProcess или ShellExecute) Например, CommandLineToArgv "глотает" концевой \ считая его знаком экранирования, и нужно не забывать его дублировать, если он в конце строки. Вот здесь с этим разбирались. В остальном, он воспринимает аргументы как есть. При запуске программ из-под CMD, аргументы интерпретируются следующим образом: Знаки |<>&^" - представляют из себя спец.символы, имеющие специальное значение. Чтобы их передать как строковой литерал в качестве аргумента, нужно предварять знаком ^ (кроме каввычки). Кавычка экранируется знаком \, то есть " Из-под батника почти всё тоже самое, но ещё добавляется символ % Чтобы экранировать, его следует удвоить %% Ну ещё есть случай со знаком ! если в батнике включён режим EnableDelayedExpansion. Его экранируют через ^ Добавлено через 3 минуты Ну и последний момент, |<>&^ можно экранировать, если заключить в кавычки. Тоже самое касается знака "пробел". По-умолчанию, в Windows он служит разделителем аргументов. Даже если ввы укажите несколько подряд идущих символов пробела, система их не воспримет как очередной аргумент. Добавлено через 2 минуты ![]() А код идентичен моему? А потом скинете ссылочку, интересно что за "баг" -)
0
|
|||
|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
||
| 06.10.2016, 00:40 [ТС] | ||
|
PS Собственно, про экранирование я прочитал в блоге у человека, который тоже запускал код со звёздочкой в Code::Blocks, но под Linux. Наверное, этот человек тоже не предполагал, что это всё Code::Blocks
0
|
||
|
10 / 10 / 6
Регистрация: 04.10.2016
Сообщений: 37
|
|
| 07.10.2016, 01:29 [ТС] | |
|
0
|
|
| 07.10.2016, 01:29 | |
|
Помогаю со студенческими работами здесь
15
Найти знак умножения Знак умножения, неправильный вывод Знак умножения в обработчике события Определить, между какими числами поставить знак умножения
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|