其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
挖掘scanf的一点功能

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

学过C语言的人应该都了解scanf,一般的C语言参考书里都会列出一大堆参数的含义,但有一个挺有用的功能却一直被忽略,至少我学C语言的时候没学到。

问题的提出:用scanf输入一个字符串的时候,如果输入中碰到空格,scanf就会把空格以前的字符放进后面的字符数组。那么如果现在要求并不是以空格作为输入结束的标志,而是以最后的回车作为输入串的结束,又该如何做呢?我在一些bbs或者论坛上也看到过有人问过这个问题,一般给出的答案都是用gets()。

事实上,scanf完全可以做到这个功能。语句是这样的:

                           scnaf(”%[^\n]s”,str);

现在详细说说这个功能。首先,这个功能是针对%s的,在%和s之间可以插入[],中括号里面是一个字符集,如果输入字串中的字母在这个字符集中,就会被读进来,当碰到第一个不在这个字符集中的字母,输入就会结束。比如:

                          scanf(”%[abc]s”,str);

输入是:abccbadef

输入是:abccba

其次,在中括号里有两个特殊字符:^和-

^表示非,即不出现在这个字符集中的字母会被接受。它必须紧接着出现在[的后面才会有这个功能,否则就会被当作一般的字符。在上面的例子里,[^\n]表示只要不碰到回车,输入的字符就会被接受。

-表示连接符,比如0-9 a-z等等,它表示了一个范围,在这个范围内的字符都会被接受或不被接受。如果要把-作为一般字符看待,-必须紧接着出现在]的前面。

另外如果要把后括号]也作为一般字符的话,它必须紧接着出现在[或者^的后面。

在msdn里面是可以找到scanf这个用法的,但不是很明显,至少要点3次链接才能到那一页,而且只是大概说了说,没有细致的讲解。在linux的man page上对于这个问题有详尽的解释,如果有兴趣的可以去看看。

 




相关文章

相关软件