BROKENKEY에서 line입력을 받을 때 문제

  • restart
    restart

    문제 링크 BROKENKEY

    int chk = 0;
    for(int i=0; i<N; i++){
        fgets(buf, 1024, stdin ); but[i] = 0;
        int l = strlen( buf );
        for( int c=0; c<l; c++ ){
            char it = buf[c];
            if( it == ' ' ) but[i] |= 1<<('z' - 'a' + 1), chk++;
            else if( it == '.' ) but[i] |= 1<<('z' - 'a' + 2), chk++;
            else if( 'a' <= it && it <= 'z' ) but[i] |= 1<<(it - 'a'), chk++;
        }
    }
    assert( chk == 28 );
    

    문제 해결 자체의 로직은 어렵지 않은데, 입력에서 N줄에 들어온 문자들을 받아오는데서 죽어도 밑에 assert를 통과하지 못하네요ㅠㅠ

    getline도 써보고, fgets도 써보고.. 정답자가 존재하는 걸 보면 입력데이터 문제는 아닌 것 같고ㅜㅜ 제가 모르는 어떤 오류가 있는걸까요?ㅠㅠ


    4년 전
3개의 댓글이 있습니다.
  • seirion
    seirion

    for 문의 첫 번째 fgets 한 직후에 buf 에 뭐가 읽어졌는 지 확인 해 보세요.


    4년 전 link
  • restart
    restart

    '\n'이 딸려오는 문제라면 인식하고 있는데, case에 다 조건문을 걸어줬으니 정상작동 할 것 같고, gets나 getline도 똑같이 assertion fail이 일어나는 게 영문을 모르겠습니다ㅠㅠ 물론 예제데이터는 정상입력 받고요..


    4년 전 link
  • restart
    restart

    음.. '\n'만 받아지는 문제라면 T, N, M, S가 들어오는 줄도 전부 line입력으로 처리했었습니다ㅠㅠ


    4년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.