DC-2 : scanf的用法

xiaoxiao2021-02-28  69

部分内容参考: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,空格。这点解决的很完美。

转载请注明原文地址: https://www.6miu.com/read-81996.html

最新回复(0)