您的位置:首页 > 编程语言 > C语言/C++

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

2015-10-02 14:45 375 查看
头文件:#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); 中用到了“*”,在这里也解说下"*"表示读入后不赋予任何变量。也就是把前面讲到的字符过滤掉。

“%*[^/]/”意思为字符过滤到第一个"/"字符位置,前面的字符不显示,[^/]表示清除第一个"/"前的字符缓冲数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: