赞
踩
记录今日做题遇到的问题
一。scanf函数中
%s为输入字符串,在输入时以非空白字符开始,以第一个非空白字符结束。字符串会自动以'\0'为最后一个字符。
格式为:
scanf("%s",s);//注意s为数组变量不带取值符
%c为输入单个字符,包括空白字符。
格式为:
scanf("%c",&c);//需要取值符
那么,空白字符是什么呢?
空格,回车,制表符等。
因此要注意,%c会将这三种空白字符吸入;
比如:
- #include<stdio.h>
- int main()
- {
- char a=0;
- scanf("%c",&a);
- printf("%c#",a);
- }
- //1输入:空格
- //输出: #
- //2输入:回车
- //输出:
- //输出:
- //输出:#
- //3输入:tab制表符
- //输出: #
而%s则不会吸入这些空白字符,而会跳过他们自动吸入有效字符串。
比如:
- #include<stdio.h>
- int main()
- {
- char a[10]={0};
- scanf("%s",a);
- printf("%s#",a);
- }
- //1输入: abcde
- //输出:abcde#
- //2输入: abcde
- //输出:abcde#
因此,在使用%c连续输入时,需要先将空白字符去掉
可采用getchar();
将空白字符吸走,再使用scanf输入。
- #include<stdio.h>
- int main()
- {
- int a=0;
- char b=0;
- scanf("%d",&a);
- getchar();
- scanf("%c",&b);
- printf("%c#",b);
- }
- //输入:1 a
- 输出:a#
二。
缓冲区
大家知道,一般我们正常的输入都是先进入到缓冲区中。
那么什么时候会将缓冲区的数据打到屏幕上呢?
今日做题时遇到了一边输入,还没输完屏幕上就开始出现结果的问题(虽然实际并未影响做题)
经过查阅,得到了以下结果:
遇到了换行符
缓冲区满
程序正常推出
这三种情况便会刷新数据
而平时我们所打的回车便会在缓冲区打入一个换行符,从而引起刷新。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。