私は関数ポインタを理解しようとしています。 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;
}
することにより、これらのコードを入力して、奇妙な何かが起こりました。 2つの数字にタイプした後。原則として文printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n");
に従うべきですが、何が起こったのかはまだ私が操作回数を入力するのを待っていたということでした。その文printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n");
が登場しました。
私は長い間コードをチェックしました。私は順序があるためその間違いを変えなぜ私は、代わりにscanf("%d %d", &i, &j);
それは愚かな質問である可能性が非常に高いのですが、私はまだ説明が必要なのscanf("%d %d \n", &i, &j);
を入力目立たない問題を見つけましたか?また、私はなぜこれらの2つの数字をこのようにしてscanf("%d %d ", &i, &j);
の代わりにscanf("%d %d ", i, j);
の代わりに入力するのだろうか?
あなたの素敵な答えに感謝します – ComplicatedPhenomenon
; scanf形式の文字列中の空白は、入力内のすべての先頭の空白を消費することを意味します。 "一度Enterキーを押すと"何も起こりませんが、空白以外の文字が入力されるまで待機します(または読み込みエラーが発生します) –