[C언어] 배열 문제

kbannie·2022년 5월 15일
0

C언어

목록 보기
6/6

Q. 배열에서 사용자가 찾고자하는 값을 입력한 후 위치 찾기

내가 헷갈린 점

void search(int a[], int b) 함수는 a배열에서 b를 찾고 해당하는 위치를 출력하는 함수이다.
여기서 헷갈린 점이 a배열에서 3을 찾을 때 for문으로 a배열의 0번지, 1번지 등을 돌리고 그에 대한 문구가 출력이 되는 것이다. 3을 찾으니 출력값으로 아래와 같이 나왔다.

3는 없다
3는 없다
3는 2에 있다

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void search(int a[], int b) {
    for (int i = 0; i < sizeof(a); i++) {
            if (b == a[i])
            {
                printf("%d는 %d에 있다\n", b, i);
                break;
            }
            else{
                printf("%d는 없다\n", b);
            }
        }
}
int main(void) {
    int a[5] = { 1, 2, 3, 4, 5 };
    int b;
    printf("찾고자 하는 값은?");
    scanf("%d", &b);
    search(a,b);
}

그래서 무엇이 문제인지 1시간동안 고민해보았고 해결책을 찾았다. search()함수에 c가 1이다라고 선언해주고 if문인 a배열에서 b값이 있다면 c를 0으로 바꿔준다. 그래서 for문에서 빠져나온 후 c값이 1일 때는 b값이 없다고 출력된다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void search(int a[], int b) {
    int c = 1;
    for (int i = 0; i < sizeof(a); i++) {
            if (b == a[i])
            {
                c = 0;
                printf("%d는 %d에 있다\n", b, i);
                break;
            }
        }
    if (c == 1) 
        printf("%d는 없다.", b);
}
int main(void) {
    int a[5] = { 1, 2, 3, 4, 5 };
    int b;
    printf("찾고자 하는 값은?");
    scanf("%d", &b);
    search(a,b);
}
profile
여행하는 데이터 사이언티스트🧙‍♂️

0개의 댓글