[英]The end character `\0` is it considered as one character or two characters?
[英]Why only one (out of two) whitespace was considered as character in the input buffer?
我试图了解输入缓冲区的工作原理。 所以我写了一段代码:
#include<stdio.h>
int main(){
int a,b;
char c,d;
scanf("%d %d",&a,&b);
scanf("%c %c",&c,&d);
printf("%d*%d*%c*%c",a,b,c,d);
return 0;
}
现在输入:
5 4 qw
所以我期望我的输出是:
5*4* *
输出:
5*4* *q
有人可以解释一下为什么它只将两个空白(一个在5到4之间,另一个在4到q之间)当作字符而不是两个字符吗? 以及两个空白中的哪个被打印为字符?
如果我们从
scanf("%d %d",&a,&b);
然后将读取5
和4
,将输入缓冲区保留为" qw"
。
现在当你做
scanf("%c %c",&c,&d);
第一个"%c"
将读取空格 ,而另一个将读取'q'
,而'w'
将保留在输入缓冲区中。
这是因为"%c"
格式不会跳过空格。 它将读取输入缓冲区中的任何字符。
如果你读如这个scanf
(和家人)引用您将看到的格式"%c"
, "%["
和"%n"
不丢弃领先的空白。
考虑
scanf("%d %d%c %c",&a,&b,&c,&d);
// input "5 4 qw"
"%d"
:读取/丢弃前导空格(不存在),然后读取/保存为int
'5'
-> 5
。
" "
:读取/放弃空格(1个空格: ' '
)。
"%d"
:读取/丢弃前导空格(不存在),然后读取/保存为int
'4'
-> 4
。
"%c"
:读取/保存1个字符,空格' '
。
" "
:读取/丢弃空格(没有空格)。
"%c"
:读取/保存1个字符,即'q'
。
'w'
保留在stdin
。
如果代码不是通过"%c"
读取空格,则在说明符之前加一个空格。 还要检查返回值。
// v
if (scanf("%d %d %c %c",&a,&b,&c,&d) == 4) Oh_Happy_Day();
使用%d
, scanf
查找一个数字并忽略空格,但是使用%c
,不会忽略q
之前的空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.