char p[500]={'
'};
fscanf(fp,"%[^\n]",p); fscanf(fp,"%[^\n]",p);
char p[500]={'\0'};
fscanf(fp,"%[^\n]",p);
========================
我猜是将“\n”之前的所有字符存到P里面去,但这里的方括号是什么意思?换成圆括号可不可以?我看了很多书都没有介绍这种用法,谁能给我解释一下?
fscanf(fp,"%[^\n]",p);
========================
我猜是将“\n”之前的所有字符存到P里面去,但这里的方括号是什么意思?换成圆括号可不可以?我看了很多书都没有介绍这种用法,谁能给我解释一下?
12 个解决方案
#1
输入时, 指定的字符集方式
#2
接受除\n之外的所有字符
#3
scanf()支持一种通用的格式说明符, 叫扫描集, 扫描集定义了用scanf()读入字符的集合.scanf()在处理扫描集时, 它将读入一串属于扫描集定义的字符的任意长度的字符串, 并将它们赋给与此扫描集中变元对应的字符数组.
定义扫描集时, 将需要扫描到字符序列置入方括号. 且开头的方括号必须以%做为前缀.
例如下面的扫描集告诉scanf()只读入字符X,Y,Z:
%[XYZ]
定义扫描集时, 将需要扫描到字符序列置入方括号. 且开头的方括号必须以%做为前缀.
例如下面的扫描集告诉scanf()只读入字符X,Y,Z:
%[XYZ]
#4
好像是M$的方言.
#5
学习了
#6
谢谢xiaocai0001(萧筱雨)
但我还是有点不明白,[^\n]是不是指除了'\n'以外的所有字符?
那[^X]就是除X以外的所有字符吗?
如果我要的是26个字母的大小写和数字和空格那么应该怎么写呢?
用一个方括号把这些全包进来吗?
但我还是有点不明白,[^\n]是不是指除了'\n'以外的所有字符?
那[^X]就是除X以外的所有字符吗?
如果我要的是26个字母的大小写和数字和空格那么应该怎么写呢?
用一个方括号把这些全包进来吗?
#7
回答我上面那个问题的,我再加二十分~~
#8
也可以用破折号定义接受字符的范围
如
%[A-Z]
表示从A到Z的字符. 扫描集是区分大小写的.
可以在扫描集中第一个字符前加前缀^, 定义求反集, 表示不接受扫描集中的任何字符.
如
%[A-Z]
表示从A到Z的字符. 扫描集是区分大小写的.
可以在扫描集中第一个字符前加前缀^, 定义求反集, 表示不接受扫描集中的任何字符.
#9
明白,谢了,结贴。
我再开个贴,请 xiaocai0001(萧筱雨)过来接分。
我再开个贴,请 xiaocai0001(萧筱雨)过来接分。
#10
结帖就可以了, 散分就不用了.
#11
应该是C定义的一个正则表达式,不过我没找到相应的资料。
单从这个串来看,楼主是对的。指按顺序读取字符,直到遇到'\n'字符。方括号不能换成圆括号。方括号是有意义的,指选择一个集合,具体可以从正则表达式的定义来测试。
单从这个串来看,楼主是对的。指按顺序读取字符,直到遇到'\n'字符。方括号不能换成圆括号。方括号是有意义的,指选择一个集合,具体可以从正则表达式的定义来测试。
#12
不好意思,没看到xiaocai0001(萧筱雨) 兄已经写的这么清楚了。
'};
fscanf(fp,"%[^\n]",p); fscanf(fp,"%[^\n]",p);