阅读背景:

谁给我解释一下scanf语句

来源:互联网 
char p[500]={'
char p[500]={'\0'};
fscanf(fp,"%[^\n]",p);
========================
我猜是将“\n”之前的所有字符存到P里面去,但这里的方括号是什么意思?换成圆括号可不可以?我看了很多书都没有介绍这种用法,谁能给我解释一下?

12 个解决方案

#1


输入时, 指定的字符集方式

#2


接受除\n之外的所有字符

#3


scanf()支持一种通用的格式说明符, 叫扫描集, 扫描集定义了用scanf()读入字符的集合.scanf()在处理扫描集时, 它将读入一串属于扫描集定义的字符的任意长度的字符串, 并将它们赋给与此扫描集中变元对应的字符数组.
定义扫描集时, 将需要扫描到字符序列置入方括号. 且开头的方括号必须以%做为前缀.
例如下面的扫描集告诉scanf()只读入字符X,Y,Z:
%[XYZ]

#4


好像是M$的方言.

#5


学习了

#6


谢谢xiaocai0001(萧筱雨) 
但我还是有点不明白,[^\n]是不是指除了'\n'以外的所有字符?
那[^X]就是除X以外的所有字符吗?
如果我要的是26个字母的大小写和数字和空格那么应该怎么写呢?
用一个方括号把这些全包进来吗?

#7


回答我上面那个问题的,我再加二十分~~

#8


也可以用破折号定义接受字符的范围

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

可以在扫描集中第一个字符前加前缀^, 定义求反集, 表示不接受扫描集中的任何字符.

#9


明白,谢了,结贴。
我再开个贴,请 xiaocai0001(萧筱雨)过来接分。

#10


结帖就可以了, 散分就不用了.

#11


应该是C定义的一个正则表达式,不过我没找到相应的资料。
单从这个串来看,楼主是对的。指按顺序读取字符,直到遇到'\n'字符。方括号不能换成圆括号。方括号是有意义的,指选择一个集合,具体可以从正则表达式的定义来测试。

#12


不好意思,没看到xiaocai0001(萧筱雨) 兄已经写的这么清楚了。

'};
fscanf(fp,"%[^\n]",p); fscanf(fp,"%[^\n]",p);



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: