scanf()的一些内涵

scanf()的一些内涵: 
 
最近发现scanf()有很多学问,几天的学习,弄清了一些问题,现在,给大家说一说使用scanf()函数的一些值得注意的地方.不知大家有没有在编程的时侯,使用了scanf()函数后会出现一些异常情况.
1.要结束scanf()函数的输入一定要按回车键.原因就是出现在这个地方.它的作用就是从输入流提取数据.
2.输入流的指针在stdio.h文件中有宏定义#define stdin   (&_streams[0]) .也就是scanf()函数相当于:fscanf(stdin,...).
例如scanf("%d",&i); 相当于fscanf(stdin,"%d",&i); .所以,当输入流中有数据时,scanf()就从中提取数据,
不管你输入到输入流数据是什么.--我认为弄清楚这点很重要!
比如下面例子:
#i nclude<stdio.h>
#i nclude<conio.h>
int main(void)
{
  char string[10];
  int i;
  clrscr();
  for(i=0;i<10;i++)
    scanf("%c",&string[i]);

  printf("/n/n");

  for(i=0;i<10;i++)
    printf("%d/n",string[i]);

  getch();
  return 0;
}
在运行时,输入到第5字符就输入结束.
结果:
1
2
3
4
5


49
10
50
10
51
10
52
10
53
10

从结果中,大家可以看出scanf()函数从输入流中提取'/n'字符.
也就是说,每当你输入完一个字符按一下回车符,这个输入的字符被scanf()提取了.但回车符还在输入流中,
当下一次scanf()函数时,因为输入流中有数据,就不从屏幕中等待输入了,就直接提取数据.这是scanf()函数提取的是:'/n'.
也就是出现了运行中,本来要输入10次字符,结果只输入了5次.
那么有什么解救的方法呢.我能想到的方法有二种:一种是每当scanf()函数执行后,把输入流中的'/n'提取出来以便下次scanf()
能正常提取.第二种方法是每当scanf()函数执行后,把输入流的数据清空(建议不要使用这种方法).
现在以第一种方法解决:
for(i=0;i<10;i++)                      for(i=0;i<10;i++)                           for(i=0;i<10;i++)
  scanf("%c",&string[i]);  改为====>>> {  scanf("%c",&string[i]);             或   {  scanf("%c",&string[i]);
                                          getchar(); /*用来提取输入流的'/n'*/         scanf("%c",NULL);  /*用来提取输入流的'/n'*/
                                       }                                           }
现在以第二种方法解决:
for(i=0;i<10;i++)           for(i=0;i<10;i++)
 scanf("%c",&string[i]); 改为====>>> {  scanf("%c",&string[i]);
                                          fflush(stdin); /*用来清空输入流*/
                                       }
好了scanf()就说到这里吧.再学习后,再和大家分享!
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值