繁体   English   中英

为什么在输入缓冲区中只有一个(两个)空白被视为字符?

[英]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);

然后将读取54 ,将输入缓冲区保留为" 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();

使用%dscanf查找一个数字并忽略空格,但是使用%c ,不会忽略q之前的空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM