| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4971 人关注过本帖, 2 人收藏
标题:scanf("%d%*c", &n)中的*c有啥用意思?
只看楼主 加入收藏
hedaacm
Rank: 6Rank: 6
来 自:河北保定
等 级:侠之大者
威 望:2
帖 子:400
专家分:418
注 册:2012-1-26
结帖率:79.41%
收藏(2)
已结贴  问题点数:20 回复次数:11 
scanf("%d%*c", &n)中的*c有啥用意思?
scanf("%d%*c", &n);
*c  有啥用处丫?究竟有啥意义丫   跳过字符哪些地方用得着丫  大侠能讲解一二吗
2012-03-18 17:35
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 
能这么写啊丶  嗯??没见过

编程之路定要走完……
2012-03-18 17:36
潇翊
Rank: 3Rank: 3
来 自:湖北襄阳
等 级:论坛游侠
帖 子:39
专家分:131
注 册:2012-2-29
收藏
得分:3 
scanf格式控制字符串%[]

[Reading Undelimited strings]
*To read strings not delimited by whitespace characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The set of characters in brackets is referred to as a control string. The corresponding input field is read up to the first character that does not appear in the control string. If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set.
*Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. This is a common scanf function extension, but note that the ANSI standard does not require it.

举一些例子:
     对于 const char* p = "12232114687ABC12356";
     sscanf(p,"%[123]",buf); // 就把是'1'或'2'或'3'的字读读到buf中,直到遇到一个不是'1'且不是'2'且不是'3'的字符,于是执行后buf应该是"1223211";
     %[123]等同于%[231],等同于%[321]……,列表中的顺序是无所谓的;
     %[123]也等同于%[1-3]或%[3-1],也就是“1至3”,对于连续的字符列表这样写就很简单,比如%[a-z]等同%[abc…省略…z];
     想想看,%[3-14]应该等同于什么?是“3至14”吗?当然不是,因为[]中的是字符,而不是数字,所以%[3-14]应该等同于%[3214],等同于%[1234];
     同理,想只取字母,那就可以写成%[A-Za-z];
     如果列表的第一个字母是^,那么正好相反,比如%[^A-Za-z]的意思就是取字母之外的所有字符。
     对于字符串"abDEc123"如果想按照字母和数字读到两个字符串中就应该是 "%[a-zA-Z]%[0-9]",buf1,buf2 ;
     假如我想取一行字符,该怎么办?"%s"是不行的,因为%s遇到空白字符(空格、制表符、\r、\n)就结束了,所以可以写成 "%[^\n]%*c",%[^\n]的作用刚才讲过了,就是读\n之外的所有字符,也就是说读到\n为止,%*c的作用就是把\n去掉,否则再次读的时候一直遇到的都是\n;
     所有对%s起作用的控制,都可以用于%[],比如"%*[^\n]%*c"就表示跳过一行,"%-20[^\n]"就表示读取\n前20个字符。


希望对你有帮助哦!

神马都是浮云,技术才是王道!
2012-03-18 18:55
北冥系列
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2012-3-18
收藏
得分:2 
* 代表从缓存中取出对应的字符丢弃不要
2012-03-18 19:10
cfun
Rank: 2
等 级:论坛游民
帖 子:30
专家分:41
注 册:2011-5-5
收藏
得分:10 
*为输入赋值抑制字符,表明要求输入数据,但不赋值,即在地址列表没有对应的地址;
比如:scanf("%3d%*5d%f",&a,&x);
如果输入:
2101400 4.7
则210传给a,4.7给x,1400谁都不给。

[ 本帖最后由 cfun 于 2012-3-22 13:29 编辑 ]
2012-03-18 21:13
jianyuling00
Rank: 3Rank: 3
来 自:琼州学院
等 级:论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
收藏
得分:1 
表示3L的说法有点怀疑

LS的赞一个
2012-03-18 21:20
喝醉的猫
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:68
专家分:120
注 册:2012-3-13
收藏
得分:1 
不知道啊...没见过
2012-03-18 21:40
google天下
Rank: 2
等 级:论坛游民
帖 子:18
专家分:38
注 册:2012-3-14
收藏
得分:1 
回复 5楼 cfun
scanf("%3d*%5d%f",&a,&x);
应写成scanf("%3d%*5d%f",&a,&x);
2012-03-18 23:29
cfun
Rank: 2
等 级:论坛游民
帖 子:30
专家分:41
注 册:2011-5-5
收藏
得分:1 
回复 8楼 google天下
不好意思,手误 。
2012-03-19 13:56
不哭5死神
Rank: 2
等 级:论坛游民
帖 子:42
专家分:74
注 册:2011-4-11
收藏
得分:0 
5楼应该是正解。个人感觉。仅供参考
2012-03-19 15:10
快速回复:scanf("%d%*c", &n)中的*c有啥用意思?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025990 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved