scanf的另一种用法

 

scanf除了平时使用的类似于

scanf("%d", &a);

等用法,还有一些不常见的用法,但却很有用。例如可以输入带空格的字符串:

char buf[80] = {0}; 
  scanf("%[^\n]", buf); 


原理是使用了[...]和[^...]这个转换符,这是一种很少见的用法,但却很有用 。
例如

#include <stdio.h>  

main()   
{    
  char string[100] = {0};   
  scanf("%[1234567890]", string);    
  printf("%s", string);  getchar();
}


如果输入123qwe,则会输出123.如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果不属于就结束提取。

再例如

#include <stdio.h> 

 main()  
{    
  char string[100] = {0};    
  scanf("%[^1234567890]", string);    
  printf("%s", string);  
  getchar();
} 


如果输入123qwe,输出却为空;如果输入qwe123,则输出qwe。不难发现它的作用是:如果输入的字符属于方括号内字符串中某个字符,那么就结束提取;如果不属于就提取该字符。
因此,使用

scanf("%[^\n]", buf);
这样,在遇到回车(\n)前,所有字符都会被提取记录,当然就包括了空格。

使用注意,在测试时发现,如果[]中的字符串前后有空格的话结果将不准确,使用时不要忘了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值