DC-2 : scanf的用法

来源:互联网 发布:钢琴可以自学吗 知乎 编辑:程序博客网 时间:2024/06/05 14:14

部分内容参考:http://blog.csdn.net/kobesdu/article/details/39051399/


scanf使用心得:

        scanf()读取前面讨论的过的某种基本变量类型的值,请在变量前加上一个&;否则会出现读取非法地址,报段错误;

        scanf()把一个字符串读进一个字符数组中,请不要使用&。


    scanf()使用空格,换行制表符和空格来决定怎样把输入分为几段。对于对于多个空格,scanf只会读取一个空格。


    scanf会在遇空格、“回车”、“跳格”键。  遇宽度结束。 遇非法输入而停止读取某一段内的输入,但不会跳出。


于缓存问题如下:

    问题三:键盘缓冲区残余信息问题
#include <stdio.h> 
int main() 

    int a; 
    char c;
    do 
    { 
        scanf("%d",&a); 
        scanf("%c",&c); 
        printf("a=%d     c=%c/n",a,c); 
        /*printf("c=%d/n",c);*/ 
    }while(c!='N'); 
}

   scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d/n",c);将C用int表示出来,启用printf("c=%d/n",c);这一句,看看scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即/n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(/r),一个“换行"(/n),在这里/r被scanf()函数处理掉了(姑且这么认为吧^_^),而/n被scanf()函数“错误”地赋给了c。


源程序应为(\n)

本人愚钝,尝试多次并未发现c不能接收字符,即使不输入字母,仍然可以打印“c=    ”只是c没有值。

对于个数不同的字符数字,存在缓冲,会重复打印,翻阅了很多博客,仍然找不到原因。


于容易读入回车转行字符,使用博文中fflush,空格。这点解决的很完美。



原创粉丝点击