我对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
谢谢!
答案 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
返回已扫描元素的数量,并接受%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);
}