sscanf不读取数字

sscanf不读取数字,c,scanf,C,Scanf,C语言中的一个新手正在尝试使用sscanf()从字符串中提取两个数字。从格式类似于“7-12”的字符串中解析数字,其结果应为firstNode=7和secondNode=12。所以我想得到数字,负号可以理解为一个数字分隔符。我当前的实现类似于我在SO上找到的示例回答: void extractEdge(char *string) { int firstNode = 123; int secondNode = 123; sscanf(string, "%*[^0

C语言中的一个新手正在尝试使用sscanf()从字符串中提取两个数字。从格式类似于“7-12”的字符串中解析数字,其结果应为
firstNode=7
secondNode=12
。所以我想得到数字,负号可以理解为一个数字分隔符。我当前的实现类似于我在SO上找到的示例回答:

void extractEdge(char *string) {
    int firstNode = 123;
    int secondNode = 123;

    sscanf(string, "%*[^0123456789]%u%*[^0123456789]%u", &firstNode, &secondNode);
    printf("Edge parsing results: Arguments are %s, %d, %d", string, firstNode, secondNode);
}
但是如果我执行上面的代码,两个int都会返回初始值123。请注意,
string
的输出提供了正确的输入字符串,因此我认为无效字符串不可能是导致此问题的可能原因


你知道为什么代码不起作用吗?提前感谢您的帮助。

%*[^0123456789]
需要一个或多个非数字字符,但您输入的
7-12
的第一个字符是数字。这使得
sscanf()
停在那里,什么也不读

删除该选项并使用
%d%*[^0123456789]%d“
作为格式说明符来处理
7-12


还要注意,读取十进制
int
的正确格式说明符是
%d
,而不是
%u
<代码>%u用于读取
无符号整数

%*[^0123456789]
必须至少匹配一个字符。如果字符串以
7
开头,则表示
%*[]
失败,并返回
sscanf
。为什么不干脆
scanf(“%d-%d”
?)行得通!想想互联网上的例子,posix有时会这么简单。