C 中scanf ( ) 函数用法 心得
我觉得,在输入输出函数中,scanf()函数,应该是最麻烦的,有时它给我们的结果很可笑,但是一定是一原因的....
首先声明一下,这篇日志不是介绍scanf()中各种格式符用法的文章(没有这个必要,但是大家一定要会用).
我尝试了很多种输入,包括一些错误的练习,曾经对scanf()由迷茫转向清醒,又由清醒再次转向迷茫......不知道何时是个尽头,谁让C如此高深呢?
在这里贴出来,也是想让自己时而不时能看到,也想知道自己的理解是否有错,错在哪里(所以我就厚着脸皮,放在上面了).
注意 , 键盘缓冲区 与输入有着密切的关系 ,并且, 类型匹配 对 输入也极为重要!!
下面进入主题:
scanf对流的操作遵从类型匹配操作原则,如果类型不匹配,它将不读取输入流。
因此输入流将滞留,如果输入流不空,scanf不会等待用户输入,直接从缓冲区中输入.
但是,scanf() 怎样匹配? stdin又是什么?
在网上搜到的关于匹配的非常少,有些细节原因还是找不到.
所以,我自作主张的下了点结论:
例: scanf("%d,%d",&i,&j); 输入:12 ,13回车 但是,j!=13. //注意,12后有一个空格,why?
原因:我解释为,在scanf()中,格式字符串中普通字符(不包括空白字符)实行的是 严格匹配,因为格式串中%d后面是一个 ',' ,因此输入中数字12后必须为一个','.
scanf("1123%s",&str); 输入:1123aaabb 时str为 aaabb,但是,输入
24aabbdd时, 会出错,因为1123必须进行严格匹配.
另外: scanf("%d\n",&i); printf("i=%d",i); 要怎么输入才能输出:
i=12 ? 它不是你想像中的那样,有机会尝试一下吧!