ok нашел его, вам нужно добавить InjectTo
"contributes": {
"grammars": [
{
"scopeName": "al.extended",
"path": "./syntax/alsyntax.extended.json",
"injectTo": [ "source.al" ]
}
],
Почему вам не нужен getchar () при получении целого числа в качестве входных данных?
blockquote>Интерпретируя ваш вопрос с точки зрения различий между двумя приведенными примерами, вы, кажется, спрашивать о разнице между обработкой
scanf
директив%c
и обработкой директив%d
. Самое простое, объяснение состоит в том, что спецификацииscanf
говорят, что когда он пытается соответствовать директиве%d
, он должен пропустить любой начальный пробел. Который, кстати, может содержать любое количество символов и который распознает больше символов, чем просто ASCII 0x20, в качестве пробела.
%c
на самом деле странный здесь. Из всехscanf
директив, которые соответствуют и преобразуют входные данные, это одна из двух, которые не пропускают начальный пробел. Это имеет смысл, поскольку позволяетscanf()
читать пробельные символы в качестве входных данных, а также потому, что вы можете указать ему совпадение (и, следовательно, пропустить) начальных пробелов, вставляя пробел в строку формата непосредственно перед%c
(или любым другим другое) директива. Или вы можете читать и игнорировать любой одиночный символ, как это делает вашgetchar()
, вставив дополнительную директиву%*c
в формат.Пропуск пробелов, выполняемый для большинства других директив, является удобством, обслуживающим табличные данные фиксированного формата, которые могут иметь различное количество места между отдельными элементами.
Почему вам не нужен getchar () при получении целочисленного значения в качестве входных данных?
blockquote>
"%d"
пропускает начальный пробел, включая оставшийся введите kbd> предыдущегоscanf("%c",&a);
.
"%c"
нет.Входные пробельные символы (как определено функцией
blockquote>isspace
) пропускаются, если в спецификации не указан спецификатор[
,c
илиn
.
C11dr §7.21.6.2 8