2016-10-30 70 views
2
​​

为什么我们必须插入3个输入,因为在双引号之前和之后给出空格?scanf函数如何在C中工作?

+0

@chqrlie,他为什么要接受一个答案?可能他们都不满意。不要问它,那不礼貌。 –

+0

@LuisColorado:OP在这方面的经验很少,我只是在告诉如何接受答案。他的问题在两个答案中都得到完全解决,接受其中一个是预期的行为。我将重新修改评论以使其更加中立。 – chqrlie

回答

1

scanf()格式" %d%d "有不良副作用多余的空格:

  • 第一个是多余的,它指示scanf()跳过任何前导空格,但这样已经不为部分的%d转换。去掉它。

  • 尾随的问题导致您的问题:它告诉scanf()跳过第二个整数后的任何尾随空格。因此它会继续读取输入,直到它看到不是空白或流结束的东西。也删除它。

请注意,您还应验证scanf()并使用它们的值转换前2个整数。也总是打印一个尾随的换行符,因为如果不这样做,某些系统不会正确地刷新输出。

#include <stdio.h> 

int main(void) { 
    int a, b; 
    printf("Enter the values of a and b: "); 
    if (scanf("%d%d", &a, &b) == 2) { 
     printf("a=%d b=%d\n", a, b); 
    } 
    return 0; 
} 
0

为什么我们必须插入3个输入作为空格在双引号之前和之后给出?

当您在格式字符串有空白,它会跳过任何数量的输入流中的空格中。因此,scanf()需要一个非空白*输入才能终止。

scanf从手册:

的空白字符的序列(空格,制表,换行等;见 isspace为(3))。该指令与输入中的任意数量的空白空间 (包括无)匹配。

所以,从格式字符串中删除空格。或者更好,avoid scanf() altogether.