sscanf 不读取数字
sscanf not reading numbers
C 的新手正在尝试使用 sscanf() 从字符串中提取两个数字。这些数字应从格式为“7-12”的字符串中解析,结果应为 firstNode = 7
和 secondNode = 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
.
C 的新手正在尝试使用 sscanf() 从字符串中提取两个数字。这些数字应从格式为“7-12”的字符串中解析,结果应为 firstNode = 7
和 secondNode = 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
.