c中scanf的缺陷


 

它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

根据定义,我们可以发现一个问题,如果我定义的类型与我输入的类型不同会有什么后果。在scanf函数中,我们约定,如果读入的值和我们定义的值是同一个类型,我们则返回1。若和我们定义的类型不是同一个类型,则写入数据流中。

于是,有些程序员便写出了如下的代码:

int n;  
while(scanf(“%d”,n)!=1){
    printf(“pls input again:”);
   …...
}

一旦,我们写出这样的判断程序,当我输入错误的时候,整个程序就会陷入死循环,不断的输出“plsinput again:”。原因在于,一旦我们输入一个错误,写入流中。则scanf下次的读取一直都会是提取的错误类型的值。如此恶性循环。


2.scanf()没有限制输入长度。

 scanf(“%s”,&s);

如果我们输入的长度大于s定义的长度,则我们输入的数据才会占据下一个内存地址。

解决方法:

scanf_s(“%s”,&s,20);

20表示s的长度。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值