用sscanf迭代

时间:2015-09-30 07:49:57

标签: c getline scanf

我对sscanf函数知之甚少,但我想要做的是遍历一行整数。给定变量

    char *lineOfInts

我已将此作为注册用户输入的行。我能够很好地获得输入,但是当我尝试使用sscanf时,我想迭代每个int。我知道我可以通过所有的注册来解释,如果我知道有多少in就会有这样的事情。

   sscanf(lineOfInts, "%d %d %d..etc", &i, &j, &k...) 

但如果我不知道用户输入了多少个整数呢?如何只用一个变量来计算所有整数?像

   sscanf(lineOfInts, "%d", &temp);
   //modifying int
   // jump to next int and repeat

谢谢!

4 个答案:

答案 0 :(得分:3)

也许是这样的:

This feature 'jaxrs-2.0' is not recognized

答案 1 :(得分:2)

您可以在循环中使用strtol,直到找不到NUL字符,如果您需要使用数组存储这些数字:

#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;
}

答案 2 :(得分:1)

详细了解sscanf(3)strtol(3)

请注意sscanf返回已扫描元素的数量,并接受%n转换说明符(消耗的数量char - s)。两者都非常有用。 strtol管理结束指针。

所以你可以在循环中使用它......

答案 3 :(得分:0)

使用"%n"记录扫描的字符数。

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);
}