首先,这似乎与this问题重复,但在我的情况下,为什么这只发生在第一次循环迭代(第一个数组元素的输入)。为什么不是所有?为什么scanf要求输入两次,但只是在第一次循环迭代?
我的代码:
#include "stdio.h"
int main(int argc, char const *argv[])
{
int a[5];
int i;
for (i = 0; i < 5; i++) {
printf("Input a[%d]:\n", i);
int x = scanf("%d ", &a[i]); // notice the white-space after %d
}
for (i = 0; i < 5; ++i)
{
printf("a[%d]=%d\n", i, a[i]);
}
}
输出例如:
Input a[0]:
1
2
Input a[1]:
3
Input a[2]:
4
Input a[3]:
5
Input a[4]:
6
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
为什么只针对a[0]
但不能用于其他要求输入了两次,也就是为什么分配给a[1-5]
的值是在它之前的一个循环迭代中输入的值?
我读this的答案,但我仍然不明白为什么它没有要求在每个循环中输入两次。有明确的解释吗?
'的scanf( “%d ”' - >'的scanf(“ %d”'(降空间)的额外空间告诉'scanf()'继续查找,直到检测到非空格为止。 – chux
请不要使用'scanf()'。**使用非常困难,而且**会导致细微的,难以如果你想从标准输入中得到每行一个项目,可以使用'fgets()'来代替。 –
@TheParamagneticCroissant:你可能对'scanf()'和'fgets()'是正确的,但我是试图了解这里的微妙,难以追踪的错误:) – theman