함수 포인터를 이해하려고합니다. 그때는 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", &i, &j);
대신
바보 같은 질문 일 가능성이 매우 높습니다. 그러나 그 이유 때문에 순서가 왜 변 했는가? 또한 나는 왜이 두 개의 숫자를 이런 식으로 scanf("%d %d ", &i, &j);
대신 scanf("%d %d ", i, j);
대신에 입력해야하는지 궁금합니다.
좋은 답변 주셔서 감사합니다 – ComplicatedPhenomenon
아닙니다. scanf 형식 문자열의 공백은 입력에서 선행 공백을 모두 소비한다는 것을 의미합니다. 그래서 "한번 ENTER를 누르면"아무 일도 일어나지 않는다. 공백이 아닌 문자가 입력 될 때까지 기다린다 (또는 읽기 오류가 발생한다) –