поведение sscanf / возвращаемое значение
Я новичок, изучающий C и пытающийся понять следующий код из онлайн-лекции. Он сканирует строку для целого числа; если встречаются символы, сбой sscanf.
int n; char c;
if (sscanf(string, " %d %c", &n, &c) == 1)
//return the integer
else
// fail
Я прочитал man-страницы для sscanf и все еще смущен проверкой возвращаемого значения и почему этот код работает. Они заявляют ,что"эти функции возвращают количество назначенных входных элементов".
если sscanf встречает только символы, он записывает их в &c...но в этом case &n не будет записан. В этом случае я бы подумал, что возвращаемое значение sscanf все равно будет 1?
3 ответов
в случае, если sscanf успешно прочитал %d
и ничего больше, он вернется 1
(назначен один параметр). Если бы перед числом были символы, оно вернулось бы 0
(никакие параметры не были назначены, так как сначала требовалось найти целое число, которого не было). Если бы было целое число с дополнительными символами, оно вернуло бы 2
как он смог назначить обоим параметрам.
код sscanf(string, " %d %c")
вернутся EOF
, 0
,1
или 2
:
2
: если ваш ввод соответствует следующему
[Необязательные пробелы] [десятичные цифры*][необязательные пробелы][любой символ][дополнительно игнорируется]
1
: Если ваш вход не удался выше, но соответствует следующему
[Необязательные пробелы] [десятичные цифры*][необязательные пробелы][нет больше данных]
[исправление]0
: Если ваш вход, после пробела и необязательного знака, не нашел цифру: пример: "z"
или "-"
.
EOF
: если вход был пуст ""
или только пробел.
- десятичным цифрам может предшествовать знак
+
или-
.
вы всегда можете проверить, что возвращает функция, поместив ее в printf
заявление, как показано ниже :
printf("%d",sscanf(string, " %d %c", &n, &c));
Это, вероятно, очистит ваши сомнения, распечатав возвращаемое значение sscanf
на ваш терминал.
также вы можете проверить это : cplusplus: sscanf
надеюсь, что помогла :)