sscanf格式c ++

For*_*ber 5 c++ scanf

我有一个sscanf声明

sscanf (fieldname, "%s_%d", name, id);
Run Code Online (Sandbox Code Playgroud)

我将输入作为frog_461,但它显示名称为"frog_461",而0显示为id.您能否建议正确的方式来提供输入以使此声明有效?就像上面的例子一样,我应该如何输入我的输入,以便name ="frog"和id = 461.谢谢.


我感谢您的所有投入.目前我无法修改代码,因此我并不是想找到一种让它工作的替代方法.我只是检查这段代码是否早期工作,如果是,那么用户必须提供什么输入才能使其正常工作.谢谢.

Mic*_*eyn 14

到目前为止给出的答案突出了sscanf限制是错误的!使用sscanf有一个正确的方法:

sscanf(fieldname, "%[^_]_%d", name, &id); 
Run Code Online (Sandbox Code Playgroud)

%[^_]阅读方式,直到遇到一个下划线.请参阅条目[手册页scanf函数.

另外,请注意前面的&符号id是必须传递一个指针id,以便更改它因为C的值传递值语义.

顺便说一句,这实际上是一个C问题,而不是C++问题,所以你应该将它标记为这样.如果您使用的是C++,则有比sscanf解析更好的选项.


Dab*_*ler 1

%s读取直到遇到空格,它不知道在下划线处停止。一种方法是使用 自行搜索下划线strchr。然后您就知道字符串的第一部分在哪里结束,并且可以使用 读取数字%d