我想了解函數指針。後來才知道是給一個example,我自我scanf格式和使用函數指針的基本問題
#include <stdio.h>
int sum(int a, int b);
int subtract(int a, int b);
int mul(int a, int b);
int div(int a, int b);
int (*p[4]) (int x, int y);
int main(void)
{
int result;
int i, j, op;
p[0] = sum; /* address of sum() */
p[1] = subtract; /* address of subtract() */
p[2] = mul; /* address of mul() */
p[3] = div; /* address of div() */
printf("Enter two numbers: ");
scanf("%d %d ", &i, &j);
printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n");
do {
printf("Enter number of operation: ");
scanf("%d", &op);
} while(op<0 || op>3);
result = (*p[op]) (i, j);
printf("%d", result);
return 0;
}
int sum(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
if(b)
return a/b;
else
return 0;
}
然後我編譯鍵入這些代碼並執行它,奇怪的事情發生了。輸入兩個數字後。那麼原則上應該遵循陳述printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n");
,但是發生了什麼,它還在等待我輸入操作次數。那麼出現printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n");
這個陳述。
我檢查了很長一段時間的代碼。在我發現我輸入scanf("%d %d \n", &i, &j);
,而不是scanf("%d %d", &i, &j);
這很可能是一個愚蠢的問題,但我仍然需要解釋,爲什麼爲了改變,因爲這種錯誤的不顯眼的問題呢?我也想知道爲什麼用這種方式輸入這兩個數字scanf("%d %d ", &i, &j);
而不是scanf("%d %d ", i, j);
?
感謝您的好回答 – ComplicatedPhenomenon
不完全; scanf格式字符串中的空格表示消耗輸入中的所有前導空格。所以「一旦你按下回車鍵」仍然沒有任何反應,它會一直等到輸入一個非空白字符(或發生讀錯誤) –