Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

기록

[C] scanf의 반환값 본문

공부/C

[C] scanf의 반환값

aoieuo 2020. 7. 15. 13:56

오늘 이독 줌 켜기 전에 문제 다 풀어야해서 별찍기랑 히스토그램을 풀었다. 근데 히스토그램에서 자꾸 시간초과가 떠서 빡쳐서 다른 문제를 풀까 하다가 '문제집' 이라는 메뉴가 있길래 들어가봤다.

근데 기본 문제들 중에 시리즈처럼 되어있는 A+B가 내가 풀어놓은 게 있어서 들어가봤다. 근데..

 

아 진짜 나 또 현타오는게 이거 못한다구 누구한테 말하기도 좀 그런,, ^_^ 거였다.

바로 테스트케이스 개수와 종료조건이 없는 A+B문제였다.

 

처음엔 진짜 내가 멍청한 건줄 알았다. 그냥 내가 백준 rule을 잘 몰랐던 거지..

사실 저기 출력처럼 출력끼리 다다다다 나와야하는 건 아니었나보다.

항상 저 출력에 맞추려고 엄청 애썼었는데ㅠㅠ 허무해,,, 그래서 그동안 malloc을 엄청 썼었다 흐엉

 

아무튼 그래서 이 문제의 포인트!는 "종료 조건"이었다.

 

입력이 무턱대고 들어오고 그냥 끝나기 때문에 입력의 끝부분을 판별하는 방법을 찾아야했다.

나 진짜 아무생각이 안들어서 결국.. 검색했다. 굴복당했네^_^

 

정답은 scanf의 반환값에 있었다.

 

scanf는 성공적으로 읽어들인 인자의 개수를 리턴한다.

(즉 scanf("%d%d", &i, &j); 를 했는데 성공적으로 읽어들였다면 2 가 리턴되는 셈이다).

라고 모두의 레퍼런스(https://modoocode.com/36)에서 말해주셨다.

 

scanf는 실행된 후에 받은 값이 없으면 (=파일의 끝, 입력의 끝) EOF, -1을 반환한다.

그래서 그냥 while(scanf("%d%d", &A, &B) != EOF) 하면 되는거였다 포항항

#include <stdio.h>

int main(){
    int A, B;
    while(scanf("%d%d", &A, &B) != EOF){
        printf("%d\n", A+B);
    }
    return 0;
}

까먹지마 가용

Comments