#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个输入,因为在双引号之前和之后给出了空格?
答案 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.