当前位置:  开发笔记 > 编程语言 > 正文

使fscanf忽略可选参数

如何解决《使fscanf忽略可选参数》经验,为你挑选了1个好方法。

我正在使用fscanf读取一个文件,其中包含
数字<-whitespace-> string <-whitespace-> optional_3rd_column

我希望从每列中提取数字和字符串,但如果存在则忽略3rd_column

示例数据:
12 foo something
03 bar
24 something #randomcomment

我想提取12,foo; 03,酒吧; 24,忽略"某事"和"#randomcomment"的东西

我现在有类似的东西

while(scanf("%d %s %*s",&num,&word)>=2)
{ 
assign stuff 
}

但是,对于没有第3列的行,这不起作用.如何在第二个字符串后忽略所有内容?



1> Adam Rosenfi..:

问题是,%*s当没有第三列时,正在吃下一行的数字,然后下一行%d是失败的,因为下一个令牌不是数字.要在不使用gets()后跟的情况下修复它sscanf(),可以使用指定的字符类:

while(scanf("%d %s%*[^\n]", &num, &word) == 2)
{ 
    assign stuff 
}

[^\n]说来匹配不在新行尽可能多的字符可能的,并且*禁止显示分配如前.另请注意,您不能在%s和之间放置空格%*[\n],因为否则格式字符串中的空格将与换行符匹配,从而导致%*[\n]匹配整个后续行,这不是您想要的.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有