10951번 문제입니다.




저는 

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
#include<iostream>
 
using namespace std;
 
int main()
{
    int A, B;
    while (1)
    {
        while (1)
        {
            cin >> A;
            if (A <= 0)
            {
                rewind(stdin);
            }
            else
            {
                break;
            }
        }
        while (1)
        {
            cin >> B;
            if (B >= 10)
            {
                rewind(stdin);
            }
            else
            {
                break;
            }
        }
        cout << A + B<<endl;
    }
    return 0;
}
 
cs


처음에 이렇게 풀었는데, 출력초과 결과가 나왔습니다. 종료 조건이 따로 명시되어 있지 않아서 계속해서 받을 수 있게 했는데, 그게 아니었나 봅니다. 

EOF를 이용해야하는 문제라고 합니다.

그래서 재코딩 해보았습니다.



근데, 계속해서 scanf_s에서 컴파일에러가 나서 stdio.h 헤더도 추가해보고, 삽질 엄청했는데..

백준은 scanf_s가 적용이 안되는 것 같습니다..

그냥 scanf_s를 scanf로 고쳐주니 정답처리 되었습니다

이 글을 보시는 분들은 이걸로 삽질하지 마세요~!


정답처리된 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<stdio.h>
 
using namespace std;
 
int main()
{
    int A, B;
    
    while (scanf("%d %d"&A,&B)!=EOF)
    {
        cout << A + B << endl;
    }
}
 
cs




*참고로 EOF에 대해서 설명을 드리자면,

scanf는 입력받은 갯수를 리턴합니다.

만약에 scanf("%d",&A); 에서 입력이 제대로 들어왔다면 1이 리턴됩니다.

scanf("%d %d",&A,&B); 입력이 제대로 들어왔다면 2가 리턴되겠죠??

그리고 에러가 발생하거나 EOF(End Of File) 파일의 끝을 만나면 -1을 리턴합니다.

EOF는 상수 -1로 정의가 되어있습니다.  



+ Recent posts