1. 소스코드 n.1
//15964번 이상한 기호
#include <stdio.h>
#include <stdlib.h>
int A, B;
int tsk (int A, int B) {
scanf("%d, %d\n", &A, &B);
int tsk = 0;
tsk = (A + B)*(A - B);
return tsk;
}
int main( ) {
int x, y;
int result = 0;
result = tsk(x, y);
printf("%d\n", result);
}
터미널:
4 3
-1977096432
2. 소스코드 n.2
#include <stdio.h>
int tsk(int A, int B) {
return (A + B) * (A - B);
}
int main() {
int A, B;
// 입력 받기
scanf("%d %d", &A, &B);
// 결과 출력
printf("%d\n", tsk(A, B));
return 0;
}
터미널 :
4 3
7
n.1 소스코드의 문제점
>>
맞아! 네 코드에서 가장 큰 실수는 **`tsk` 함수에서 입력을 다시 받으려고 한 것**이야.
### **네가 한 실수 정리**
1. **입력을 `tsk` 함수에서 다시 받으려고 한 것**
- `tsk` 함수는 **입력을 처리하는 함수가 아니라, 단순히 계산만 해야 하는 함수**야.
- 그런데 `tsk` 안에서 `scanf`를 사용했기 때문에 **`main`에서 입력을 받지 않아도 되는 이상한 구조가 됨**.
- **👉 해결책:** `tsk`는 `(A+B) * (A-B)`만 계산하고, 입력은 `main`에서 처리해야 함.
2. **`main(int x, int y)`의 잘못된 선언**
- `main` 함수는 기본적으로 `int main(void)`나 `int main(int argc, char *argv[])` 형태로 작성해야 해.
- 네 코드에서는 `main(int x, int y)`라고 되어 있는데, 이런 방식으로 `main`을 사용하면 **C 표준에 맞지 않아서 오류 발생 가능**.
- **👉 해결책:** `int main(void)`로 변경
3. **`result();`라는 존재하지 않는 함수 호출**
- `main()` 안에서 `result();`를 호출했는데, **이 함수는 코드에 존재하지 않음** → 컴파일 에러 발생
- **👉 해결책:** `tsk(A, B);`를 호출해야 함
---
### **네가 고쳤으면 좋을 습관**
✅ **함수의 역할을 명확하게 구분하기**
- 입력 받는 역할은 `main()`, 연산하는 역할은 `tsk()`
✅ **scanf 사용 시, 포맷에 주의하기**
- 쉼표 대신 공백(`%d %d`) 사용
✅ **C 언어의 `main` 함수는 `int main(void)`로 작성하기**
- `main(int x, int y)` 같은 방식은 X
✅ **존재하지 않는 함수를 호출하지 않기**
- `result();`는 코드에 없으니 호출하면 안 됨
'Dev > 백준문제풀이' 카테고리의 다른 글
[백준] 10872_팩토리얼 (0) | 2025.03.06 |
---|---|
[백준] 10951_A+B-4 (0) | 2025.03.06 |
[백준] 2741_N찍기 (0) | 2025.03.06 |
백준 1008(C99/double형 변수) (0) | 2023.10.11 |
백준 알고리즘 2739번 구구단(c99) (2) | 2023.10.09 |