Iterating with sscanf

后端 未结 4 417
闹比i
闹比i 2021-01-29 08:58

I do not know much about the sscanf function, but what I am trying to do is iterate through a line of integers. Given the variable

    char *lineOfInts


        
相关标签:
4条回答
  • 2021-01-29 09:04

    Read much more about sscanf(3) and strtol(3)

    Notice that sscanf returns the number of scanned elements and accepts the %n conversion specifier (for the number of consumed char-s). Both are extremely useful in your case. And strtol manages the end pointer.

    So you could use that in a loop...

    0 讨论(0)
  • 2021-01-29 09:06

    You can use strtol in a loop until you don't find the NUL character, if you need to store those numbers use an array:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_NUMBERS 10
    
    int main(void) 
    {
        char *str = "12 45 16 789 99";
        char *end = str;
        int numbers[MAX_NUMBERS];
        int i, count = 0;
    
        for (i = 0; i < MAX_NUMBERS; i++) {
            numbers[i] = (int)strtol(end, &end, 10);
            count++;
            if (*end == '\0') break;
        }
        for (i = 0; i < count; i++) {
            printf("%d\n", numbers[i]);
        }
        return 0;
    }
    
    0 讨论(0)
  • 2021-01-29 09:16

    Use "%n" to record the count of characters scanned.

    char *lineOfInts;
    
    char *p = lineOfInts;
    while (*p) {
      int n;
      int number;
      if (sscanf(p, "%d %n", &number, &n) == 0) {
        // non-numeric input
        break;
      }
      p += n;
      printf("Number: %d\n", number);
    }
    
    0 讨论(0)
  • 2021-01-29 09:29

    Maybe something like that :

    #include <stdio.h>
    
    int main(void)
    {
      const char * str = "10 202 3215 1";
      int i = 0;
      unsigned int count = 0, tmp = 0;
      printf("%s\n", str);
      while (sscanf(&str[count], "%d %n", &i, &tmp) != EOF) {
        count += tmp;
        printf("number %d\n", i);
      }
    
      return 0;
    }  
    
    0 讨论(0)
提交回复
热议问题