scanf函数如何在C中工作?

时间:2016-10-30 12:50:42

标签: c

#include <stdio.h>

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

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

  

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

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

来自scanf手册:

  

一系列空格字符(空格,制表符,换行符等;请参阅   isspace为(3))。该指令匹配任意数量的空白区域,   包括无,在输入中。

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