반응형

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 를 추가해주니 결과가 정상적으로 나온다.

반응형
반응형

a 배열에 test를 넣으면 a의 사이즈는 자동으로 5가 된다.

 

이유는 끝에 \0이 들어가기 때문이다.

t e s t \0

strlen은 \0을 제외하고 string 크기만 찾아준다.

 

결과는 4가 나온다.


컴파일 했을때 오류는 안뜬다.

하지만 실행시키고 test라는 문자를 입력하자마자 오류가 뜬다.

 

왜냐하면 a배열의 사이즈를 지정을 안해줬기 때문에 버퍼의 크기가 0이라 오류가 뜬다.

 

사이즈를 5로 지정해주면 정상적으로 값이 나온다.

t e s t \0

만약 사이즈를 4로 지정해주면 버퍼가 작다고 오류가 뜬다.

왜냐하면 끝에 \0 이 들어갈 자리가 없기 때문이다.

 

반응형
반응형

[문제]

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

 

 

 

[입력]

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

 

 

 

[출력]

첫째 줄부터 차례대로 별을 출력한다.

 

 

 

[입출력 예제]

입력 출력
1 *
2
 *

 *
3 * *
 *
* *
 *
* *
 *
4 * *
 * *
* *
 * *
* *
 * *
* *
 * *

 

 

[문제풀이]

i는 행, j는 열이다.

행과 열이 각각 짝수와 홀수일때의 규칙성이 나타난다.

 

 

 

[소스코드]

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
#include <stdio.h>
 
int main()
{
    int n;
    scanf("%d"&n);
    for (int i = 0; i <= 2 * n - 1; i++)
    {
        for (int j = 0; j <= n - 1; j++)
        {
            if (i % 2 == 0)
            {
                if (j % 2 == 0)
                {
                    printf("*");
                }
                else
                {
                    printf(" ");
                }
            }
            else
            {
                if (j % 2 == 0)
                {
                    printf(" ");
                }
                else
                {
                    printf("*");
                }
            }
        }
        printf("\n");
    }
}
cs

 

 

[결과]

 

 

 

[문제출처 및 문제풀기]

https://www.acmicpc.net/problem/10996

 

10996번: 별 찍기 - 21

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

 

반응형

'<Algorithm> > <C>' 카테고리의 다른 글

[백준][C] 2446번 별 찍기 - 9  (0) 2020.07.07
[백준][C] 2523번 별 찍기 - 13  (0) 2020.07.07
[백준][C] 10817번 세 수  (0) 2020.07.07
[백준][C] 5543번 상근날드  (0) 2020.07.06
[백준][C] 10039번 평균 점수  (0) 2020.07.05

+ Recent posts