C语言scanf()函数:格式化输入函数

头文件:#include <stdio.h>

scanf() 函数用来格式化输入数据,即按用户指定的格式从键盘上把数据读入到指定的变量中。其原型为:
int scanf ( char * format [ ,argument, ... ]);

其调用格式为:      scanf("<格式化字符串>",<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回EOF
【参数】format为格式化控制字符串,可以由三类字符构成。

1) 格式化说明符
 
格式字符 说明
 %a %A读入一个浮点值(仅C99有效)
 %c读入一个字符
 %d读入十进制整数
 %i读入十进制,八进制,十六进制整数
 %o读入八进制整数
 %x %X读入十六进制整数
 %s读入一个字符串
 %f %F读入一个浮点数
 %e %E读入一个浮点数
 %g %G读入一个浮点数
 %p读入一个指针
 %u读入一个无符号十进制整数
 %n至此已读入值的等价字符数
 %[]扫描字符集合
 %%读%符号
             
另外,还有附加格式说明字符,用于追加在上面的格式说明符后面。

修饰符说明
L\l长度修饰符,输入"长"数据
长度修饰符,输入"短"数据
W整型常数,指定输入数据所占宽度
*星号,读入后不赋予任何变量
hh同 h,但仅对C99有效
ll同 l,但仅对C99有效

这里说下转换字符:[...]和[ ^...]。 
一. [...]使用  输入数据为0984abcZXC
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%[1234567890] ",strings);//这里用的是[1234567890]
printf( "%s ",strings); 
}
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%[0-9] ",strings); //这里用的是[0-9] 
printf( "%s ",strings); 
}
输出:0984输出:0984

      通过运行可以发现它的作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果一经发现不属于就结束提取。该方法会自动加上一个字符串结束符到已经提取的字符后面。 
       scanf( "%[1234567890] ",strings)和scanf( "%[0-9] ",strings)是相同的,%[0-9]中的'-'是范围连接符。
常表示的有[0-9] 表示匹配0到9中任意数字,%[a-z] 表示匹配a到z中任意字符,%[A-Z] 表示匹配A到Z中任意字符,也可以[0-9a-zA-Z],也可以[0-5]表达。

2.%[^...]使用
   ^表示"非",即读入其后面的字符就结束读入。

取到指定字符为止的字符串。
如在下例中,取遇到空格为止字符串。
给定一个字符串iios/12DDWDFF@122,
获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'后的一串内容送到buf中
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%[^ ]",strings); //输入1aB 4tC
printf( "%s ",strings); 
}
#include <stdio.h> 
main() 

char strings[100]; 
printf( "input strings:\n"); 
scanf( "%*[^/]/%[^@]",strings); //输入iios/12DDWDFF@122
printf( "%s ",strings); 
}
输出:1aB输出:12DDWDFF

   通过运行可以发现它的作用是:如果输入的字符属于方括号内字符串中某个字符(空格),那么就停止提取该字符后的字符了。
在第二个实例scanf( "%*[^/]/%[^@]",strings); 中用到了“*”,在这里也解说下"*"表示读入后不赋予任何变量。也就是把前面讲到的字符过滤掉。
“%*[^/]/”意思为字符过滤到第一个"/"字符位置,前面的字符不显示,[^/]表示清除第一个"/"前的字符缓冲数据。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值