谁给我解释一下scanf语句

caijize 2005-11-30 12:42:33
char p[500]={'\0'};
fscanf(fp,"%[^\n]",p);
========================
我猜是将“\n”之前的所有字符存到P里面去,但这里的方括号是什么意思?换成圆括号可不可以?我看了很多书都没有介绍这种用法,谁能给我解释一下?
...全文
124 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocai0001 2005-11-30
  • 打赏
  • 举报
回复
scanf()支持一种通用的格式说明符, 叫扫描集, 扫描集定义了用scanf()读入字符的集合.scanf()在处理扫描集时, 它将读入一串属于扫描集定义的字符的任意长度的字符串, 并将它们赋给与此扫描集中变元对应的字符数组.
定义扫描集时, 将需要扫描到字符序列置入方括号. 且开头的方括号必须以%做为前缀.
例如下面的扫描集告诉scanf()只读入字符X,Y,Z:
%[XYZ]
zhousqy 2005-11-30
  • 打赏
  • 举报
回复
接受除\n之外的所有字符
xiaocai0001 2005-11-30
  • 打赏
  • 举报
回复
输入时, 指定的字符集方式
RainWindy 2005-11-30
  • 打赏
  • 举报
回复
不好意思,没看到xiaocai0001(萧筱雨) 兄已经写的这么清楚了。
RainWindy 2005-11-30
  • 打赏
  • 举报
回复
应该是C定义的一个正则表达式,不过我没找到相应的资料。
单从这个串来看,楼主是对的。指按顺序读取字符,直到遇到'\n'字符。方括号不能换成圆括号。方括号是有意义的,指选择一个集合,具体可以从正则表达式的定义来测试。
xiaocai0001 2005-11-30
  • 打赏
  • 举报
回复
结帖就可以了, 散分就不用了.
caijize 2005-11-30
  • 打赏
  • 举报
回复
明白,谢了,结贴。
我再开个贴,请 xiaocai0001(萧筱雨)过来接分。
xiaocai0001 2005-11-30
  • 打赏
  • 举报
回复
也可以用破折号定义接受字符的范围

%[A-Z]
表示从A到Z的字符. 扫描集是区分大小写的.

可以在扫描集中第一个字符前加前缀^, 定义求反集, 表示不接受扫描集中的任何字符.
caijize 2005-11-30
  • 打赏
  • 举报
回复
回答我上面那个问题的,我再加二十分~~
caijize 2005-11-30
  • 打赏
  • 举报
回复
谢谢xiaocai0001(萧筱雨)
但我还是有点不明白,[^\n]是不是指除了'\n'以外的所有字符?
那[^X]就是除X以外的所有字符吗?
如果我要的是26个字母的大小写和数字和空格那么应该怎么写呢?
用一个方括号把这些全包进来吗?
bombwang 2005-11-30
  • 打赏
  • 举报
回复
学习了
  • 打赏
  • 举报
回复
好像是M$的方言.

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧