格式字符串scanf()中的空格[重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

#include<stdio.h>
int main() {
    int a,b;
    printf("Enter values of a and b\n");
    scanf(" %d%d ",&a,&b);
    printf("a=%d b=%d", a, b);
    return 0 ;
}

这里如果我使用scanf(),就像在我的代码中一样,那么编译器希望用户输入三个值,我无法理解这一点,当我使用scanf()而没有任何空格时,它只按要求请求两个输入,所以我很困惑这两者之间的区别,PLZ解释......

c input output scanf whitespace
2个回答
0
投票

如果你在数字后面给出一个空格,scanf必须确定要匹配的空格的结尾:

scanf("%d ", &a);

这里的空间意味着读取并丢弃所有空格。必须为scanf显示非空白字符(或EOF),以便清楚所有内容,以便正确读取和丢弃它们。

考虑这个输入流(点是字符指示符):

   1   2
........

如果你打电话给scanf("%d"),那么在打电话之后,剩下的流是

   2
....

...在下次读取时将丢弃空格。请注意,读取数字时会自动丢弃前导空格。

如果你改为调用scanf("%d "),剩下的流是

2
.

你看到空白立即消失了。


0
投票

看看this

你可以使用%d之间的空格。这将要求用户输入类似:12 32(带空格)。

如果你不想这样,你应该使用一个带有scanf的循环。

祝好运。

© www.soinside.com 2019 - 2024. All rights reserved.