반응형

void가 아닌 함수에서의 반환 값이 없다는 것은 코드 자체를 잘못 짠 것이다. 

그런 코드는 이상하게 작동할 수 있다.

 

 

이 코드는 사용자가 yes를 입력했다면 "긍정적인 답변" 이 출력되고, no를 입력했다면 "부정적인 답변"이라고 출력되게 하는 코드이다.

조건은 get_response 함수에서 yes면 1을 반환하고 no면 0을 반환하도록 하는 것이 조건이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>
int get_response(char* prompt);
int main(void)
{
    char a[5= "";
    
    gets_s(a, sizeof(a));
    int b = get_response(a);
    if (b == 1)
    {
        printf("긍정적인 답변");
    }
    else if (b == 0)
    {
        printf("부정적인 답변");
    }
    else
    {
        return 0;
    }
    return 0;
}
int get_response(char* prompt)
{
    char a[] = "yes";
    char b[] = "no";
 
    if (strcmp(prompt, a) == 0)
    {
        return 1;
    }
    else if (strcmp(prompt, b) == 0)
    {
        return 0;
    }
}
cs

이런식으로 코드를 짰다면 get_response 함수에서 사용자가 yes나 no말고 다른것을 입력했을 때

반환 값이 없다.     // 잘못 짠 코드

 

이런식의 코드는 실행은 되는데 이상하게 작동했다.

예를들어 y만 입력해도 "긍정적인 답변" 이라고 나오고 nod 이런식으로 입력해도 "긍정적인 답변" 이라고 나온다.

 

그래서 get_response 함수에서 else 를 하나 추가해줬다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <string.h>
int get_response(char* prompt);
int main(void)
{
    char a[5= "";
    
    gets_s(a, sizeof(a));
    int b = get_response(a);
    if (b == 1)
    {
        printf("긍정적인 답변");
    }
    else if (b == 0)
    {
        printf("부정적인 답변");
    }
    else
    {
        return 0;
    }
    return 0;
}
int get_response(char* prompt)
{
    char a[] = "yes";
    char b[] = "no";
 
    if (strcmp(prompt, a) == 0)
    {
        return 1;
    }
    else if (strcmp(prompt, b) == 0)
    {
        return 0;
    }
    else
    {
        return EOF;
    }
}
cs

else 를 추가해주니 결과가 정상적으로 나온다.

반응형

+ Recent posts