%*c的作用

 
%*c 的标准用法是什么。它的意义何在?
我所知道的是它经常出现在例如
cscanf("%s%*c",&a);语句中。
 
 
 
你的例子中的%*c的作用是读入'\n',即回车符,否则后面读入的将是'\n'。

"*"表示该输入项读入后不赋予任何变量,即跳过该输入值。

这在减小内存开支上面还是有一点用处的,不需要的字符直接跳过,免得申请没用的变量空间



其实还有更强大的一些字符串读入技巧,如下:

对于输入字符串还有一些比较有用的控制,
经常需要读入一行字符串,而这串字符里面可能有空格、制表符等空白字符,
如果直接用%s是不可以的,于是有些人就想到用gets(),当然这也是一种选择,
但是懂C的人基本上都知道gets()是一个很危险的函数,而且很难控制,
特别是与scanf()交替使用时前者的劣势更是一览无余,所以gets()一般是不推荐用的,

其实用%[^\n]就可以很好的解决这个问题了,

^表示"非",即读入其后面的字符就结束读入。
这样想读入一行字符串直接用scanf("%[^\n]%*c",str);就可以了,
%*c的作用也是读入\n,否则后面读入的将一直是\n。

所有对%s起作用的控制都可以用%[],
比如%[0-9]表示只读入'0'到'9'之间的字符,%[a-zA-Z]表示只读入字母,
'-'是范围连接符,
当然也可以直接列出你需要读入的字符,上面读字母之所以用范围连接符是因为要输入52个字符太麻烦了,
如果你只需要读"abc"里面的字符就可以用%[abc] (或者%[cab]、%[acb]、%[a-c]、%[c-a].....),
如果想读入某个范围之外的字符串就在前面加一个'^',如:%[^a-z]就表示读入小写字母之外的字符
上面这些用法其实可以有很多推广用法的,比如说你要处理下面的字符串
23 44r f30
88888,3245;34:123.9999

/*当输入中有9999时退出,否则一直输入*/
#include <stdio.h> 
void main(void)
{
int n;

while((scanf("%*[^0-9]"),1) && scanf("%d", &n)&&n!=9999)printf("%d ", n);

getch();
}
如何,上面的程序中的while(...),看的是不是眼晕,因为,C语言本来就是很好很强大的。

转载于:https://www.cnblogs.com/dreamgoing/p/3587157.html

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值