sscanf不读取数字
C语言中的一个新手正在尝试使用sscanf()从字符串中提取两个数字。从格式类似于“7-12”的字符串中解析数字,其结果应为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
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有时会这么简单。