Dev/백준문제풀이

[백준] 15964 이상한 기호

bebeghi3356 2025. 3. 23. 19:09

 

 

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