首先,這似乎與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