sscanf 不读取数字

sscanf not reading numbers

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

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

但是如果我执行上面的代码,总是返回两个整数的初始值 123。请注意,string 的输出给出了正确的输入字符串,因此我认为无效字符串不可能是导致此问题的可能原因。

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

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

删除它并使用 "%d%*[^0123456789]%d" 作为格式说明符来处理 7-12.

另请注意,读取小数 int 的正确格式说明符是 %d,而不是 %u%u 用于阅读 unsigned int.