Почему вам не нужен getchar () при получении целого числа в качестве входных данных? [Дубликат]

ok нашел его, вам нужно добавить InjectTo

"contributes": {
        "grammars": [
            {
                "scopeName": "al.extended",
                "path": "./syntax/alsyntax.extended.json",
                "injectTo": [ "source.al" ]
            }
        ],
0
задан kalpaj agrawalla 18 January 2019 в 23:45
поделиться

2 ответа

Почему вам не нужен getchar () при получении целого числа в качестве входных данных?

Интерпретируя ваш вопрос с точки зрения различий между двумя приведенными примерами, вы, кажется, спрашивать о разнице между обработкой scanf директив %c и обработкой директив %d. Самое простое, объяснение состоит в том, что спецификации scanf говорят, что когда он пытается соответствовать директиве %d, он должен пропустить любой начальный пробел. Который, кстати, может содержать любое количество символов и который распознает больше символов, чем просто ASCII 0x20, в качестве пробела.

%c на самом деле странный здесь. Из всех scanf директив, которые соответствуют и преобразуют входные данные, это одна из двух, которые не пропускают начальный пробел. Это имеет смысл, поскольку позволяет scanf() читать пробельные символы в качестве входных данных, а также потому, что вы можете указать ему совпадение (и, следовательно, пропустить) начальных пробелов, вставляя пробел в строку формата непосредственно перед %c (или любым другим другое) директива. Или вы можете читать и игнорировать любой одиночный символ, как это делает ваш getchar(), вставив дополнительную директиву %*c в формат.

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

0
ответ дан John Bollinger 18 January 2019 в 23:45
поделиться

Почему вам не нужен getchar () при получении целочисленного значения в качестве входных данных?

"%d" пропускает начальный пробел, включая оставшийся введите предыдущего scanf("%c",&a);.
"%c" нет.

Входные пробельные символы (как определено функцией isspace) пропускаются, если в спецификации не указан спецификатор [, c или n.
C11dr §7.21.6.2 8

0
ответ дан chux 18 January 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: