当前位置:   article > 正文

C语言中scanf函数%s和%c以及回车对缓冲区的作用_scanf_s中%c含义

scanf_s中%c含义

记录今日做题遇到的问题

一。scanf函数中

%s为输入字符串,在输入时以非空白字符开始,以第一个非空白字符结束。字符串会自动以'\0'为最后一个字符。

格式为:

scanf("%s",s);//注意s为数组变量不带取值符

%c为输入单个字符,包括空白字符

格式为:

scanf("%c",&c);//需要取值符

那么,空白字符是什么呢?

空格,回车,制表符等。

因此要注意,%c会将这三种空白字符吸入;

比如:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char a=0;
  5. scanf("%c",&a);
  6. printf("%c#",a);
  7. }
  8. //1输入:空格
  9. //输出: #
  10. //2输入:回车
  11. //输出:
  12. //输出:
  13. //输出:#
  14. //3输入:tab制表符
  15. //输出:    #

而%s则不会吸入这些空白字符,而会跳过他们自动吸入有效字符串。

比如:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char a[10]={0};
  5. scanf("%s",a);
  6. printf("%s#",a);
  7. }
  8. //1输入: abcde
  9. //输出:abcde#
  10. //2输入:    abcde   
  11. //输出:abcde#

因此,在使用%c连续输入时,需要先将空白字符去掉

可采用getchar();

将空白字符吸走,再使用scanf输入。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a=0;
  5. char b=0;
  6. scanf("%d",&a);
  7. getchar();
  8. scanf("%c",&b);
  9. printf("%c#",b);
  10. }
  11. //输入:1 a
  12. 输出:a#

二。

缓冲区

大家知道,一般我们正常的输入都是先进入到缓冲区中。

那么什么时候会将缓冲区的数据打到屏幕上呢?

今日做题时遇到了一边输入,还没输完屏幕上就开始出现结果的问题(虽然实际并未影响做题)

经过查阅,得到了以下结果:

  1. 遇到了换行符

  1. 缓冲区满

  1. 程序正常推出

这三种情况便会刷新数据

而平时我们所打的回车便会在缓冲区打入一个换行符,从而引起刷新。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号