C-Language: How to get number from string via sscanf?

c, numbers, output, scanf, string

Solution

A combination of digit filtering and `sscanf()` should work.

int GetNumber(const char *str) {
  while (!(*str >= '0' && *str <= '9') && (*str != '-') && (*str != '+') && *str) str++;
  int number;
  if (sscanf(str, "%d", &number) == 1) {
    return number;
  }
  // No int found
  return -1; 
}

Additional work needed for numbers that overflow.

A slower, but pedantic method follows

int GetNumber2(const char *str) {
  while (*str) {
    int number;
    if (sscanf(str, "%d", &number) == 1) {
      return number;
    }
    str++;
  } 
  // No int found
  return -1; 
}

Problem

Recently I have need to extract a number from a string, but on really old C with means functions like `strtok` are not supported. I would prefer `sscanf`, but i can't understand it. Note that the integer is in random place (user-defined). In general thats what i want to happan as an example: ``` Input: char * string = "He is 16 years old."; Output: 16 ```

Original source