поведение 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

надеюсь, что помогла :)