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()就说到这里吧.再学习后,再和大家分享!