使用scanf常见问题

本文列举了使用scanf函数时常见的几个问题,包括空白符问题、缓冲区问题、参数类型匹配问题以及输入字符串含有空格的问题,并详细分析了错误原因,提供了相应的解决方法。通过示例代码解释了如何避免这些问题,帮助读者理解和改进使用scanf的技巧。
摘要由CSDN通过智能技术生成

scanf函数我曾经在这个函数上犯过不少错误,也看到别人犯过的错误,记下来,提醒自己不要重蹈覆辙了。如果对你有用,那就更好了:)如果你发现文章中有错误,欢迎你不吝赐 教。希望和大家一起学习!

曾经错的几个地方:(xpsp2,vc6.0环境下)

1.空白符问题

[cpp]  view plain  copy
  1. #include<stdio.h>  
  2.   
  3. void main()  
  4. {     
  5.     int a;  
  6.     printf("input the data\n");  
  7.     scanf("%d\n",&a);// 这里多了一个回车符\n  
  8.     printf("%d",a);  
  9.     return 0;  
  10. }  
结果要输入两个数程序才结束,而不是预期的一个。why?

原因:用空白符结束格式化扫描条件("%d\n")时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果你用scanf("%d  ",&a)(以空格结束)也会出现同样的问题。

解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。

2.缓冲区问题

这是一个非常容易错的地方,我就错过多次。

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2.   
  3. void main()  
  4. {  
  5.     char c[5]={0};  
  6.   
  7.     printf("please input 4 characters\n");  
  8.   
  9.     for(int i = 0; i < 4; i++)  
  10.         scanf("%c",&c[i]);  
  11.   
  12.     printf(c);  
  13. }  
如果输入:
a
b
c

那么循环就会“提前”结束了.

原因: 输入a和第一个回车后,a和这个回车符都留在缓冲区中。第一个scanf读取了a,但是输入缓冲区里面还留有一个‘\n’,第二个scanf读取这个‘\n’。然 后输入b和第二个回车,同样的,第三个scanf读取了b,第四个scanf读取了第二个回车符‘\n’。第五个读取了c。所以五个scanf都执行了,并没有提前结束。只不过有的scanf读取到了回车符而已。

解决方法:把程序改成这样就可以了:

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2.   
  3. void main()  
  4. {  
  5.     char c[5]={0};  
  6.   
  7.     printf("please input 4 characters\n");  
  8.   
  9.     
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值