分享
 
 
 

谈谈scanf函数的几个使用技巧

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

谈谈scanf的几个使用技巧

"哈哈哈,各位高手菜鸟,今天,我来主讲scanf函数的一些用法","什么什么,这小子是不是欺负我们不识字呀!","scanf谁不会!".....台下一大堆臭鸡蛋,烂番茄如下雨般扔上台来,有人喊"这小子铁定欠扁","一定是想来骗稿费!"。。。。。。。。。。。(作者:冤枉呀!写这种冬冬那里有钱可赚,我已穷的快卖血了,呜。。。。。。。。。。。")

--------------------------------------------------------------------------------

-------------------------------------------

今天主要谈三个问题:

一.scanf函数输入格式中的字符串.

scanf函数输入格式中也可以含有普通字符串, 但他的含义是这些字符必须在输入中出现

,例如:

int num;

Scanf("hello %d", & num);

他的含义是首先要求输入一个hello字符串,然后再输入一个十进制数. 注意在等待输入时

忽略hello与要输入的数之间

的空格,制表符,回车. 因此这两种输入都是正确的:

hello 1234

hello1234

二.scanf函数的返回值.

看到一个学弟写的程序:

#include <stdio.h>

main()

{

int num;

printf("please input the student's score: ");

scanf("%d",&num);

if((num<0)||(num>100))

{

printf("The score put isnt fine. please run and input again.");

}

else if(num>90)

{

printf("The grade is A.");

}

else if((num>80)&&(num<90))

{

printf(..................

.............

}

..............

}

这个程序是没错,不过如果有人要存心捣乱, 输入时不是输入数字,而是其他的什么字

符,那么congratulations,

这个程序崩溃掉了. (^@^)

如何防止出现这种情况,有人通过把数字先读入到数组中,再判断读取的是不是一个数

字........., 作法真的好繁.

如果知道scanf函数的返回值的话,这个问题就好办多了. scanf函数执行成功时的返回

值为成功读取的变量数,

如果第一个变量的读取既告失败则返回值为0.

哈哈哈,我们可以通过判断scanf函数执行的返回值, 可以制止用户不正确地输入,从

而控制程序的流程.

把上面的程序改改:

#include <stdio.h>

main()

{

int num,int result=0;

printf("please input the student's score: ");

while(result==0)

{

fflush(stdin); /* 清空输入缓冲区. */

if(result!=1)printf("Please input a digital score: ");

result=scanf("%d",&num);

}

............................

}

一切OK!

三.scanf函数中一个参数的应用.

在scanf函数中,我们可以使用 %c来读取一个字符,使用 %s 读取一个字符串. 但是读取字

符串时不忽略空格,读字符串时忽略开始的空格,

并且读到空格为止,因此我们只能读取一个单词,而不是整行字符串.因此一般使用fgets来读

取一个字符串.

其实scanf函数也可完成这样的功能,而且还更强大.

这里主要介绍一个参数,%[ ] ,这个参数的意义是读入一个字符集合. [ ]是个集合的标

志,因此%[ ]特指读入此集合所限定的那些字符, 比如 %[A-Z] 是输入大写字母,一旦遇到不在

此集合的字符便停止. 如果集合的第一个字符是" ^ ", 这说明读取不在" ^ " 后面集合的字

符,既遇到" ^ " 后面集合的字符便停止.注意此时读入的字符串是可以含有空格的.

Eg. 输入一个字符串, 这个字符串只含有小写字符.遇到第一个不是小写字符时停止.

scanf("%[a-z],str);

Eg. 想输入一个字符串, 遇到 "." 停止,可设计如下:

scanf("%[^.]", str);

使用这个参数,你可以完成许多强大的功能呦!

--------------------------------------------------------------------------------

----------------------------------------

各位父老乡亲们, 这就是本人在用scanf函数时的一点小心得..............

(台下想起如雷的吼声,"这么简单的东西,你当我们是白痴呀!","退门票,退门票!",顿时,作者

被一大堆飞来的臭鞋掩埋............)

作者的话: 这是我的第一篇技术文章, 肯定会有一些错误,欢迎大家的指点. 其实我更喜欢C++, 也许以后会写一些C++的文章,欢迎高手的指点.

如果能或得大家的支持的话, 我会继续写的. (^-^)

作者: hyqryq

再说几句: 通常来讲,scanf函数和他的一些参数并不是很常用,主要是因为:

1.许多系统的scanf函数都有漏洞. (典型的就是TC再输入浮点型时有时会出

错).

2.用法复杂,容易出错.

3.编译器作语法分析时会很困难,从而影响目标代码的质量和执行效率.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有