가장 흔한 접두어 PREFIX 문제 입력이 이상한 것 같아요

  • 투명드래곤
    투명드래곤

    입력 조건이 1 <= C <= 60, 2 <= N <= 3000, 1 <= M <= 200, 모든 단어는 소문자로 구성된다 인데요,

    scanf("%d",&C);
    assert(C>=1 && C<=60);
    
    scanf("%d%d ", &N, &M);
    assert(N>=2 && N<=3000 && M>=1 && M<=200);
    
    gets(b);
    l = strlen(b);
    for (i = 0; i < l; i++)
        assert(b[i]>='a' && b[i]<='z');

    이렇게 assert를 몇개 넣었더니 런타임 에러를 뱉어내내요

    확인 부탁드립니다 ^^;


    13년 전
6개의 댓글이 있습니다.
  • Taeyoon_Lee
    Taeyoon_Lee

    저는 assert 넣어도 AC가 잘 나오네요. assert 때문에 런타임 에러가 나는 건 아닙니다.


    13년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    관리자 권한으로 투명드래곤 님의 소스를 제 컴퓨터에서 돌려보았는데, 로컬에서는 AC가 나오네요. 아마도 AOJ 문제가 아닐까 싶습니다.


    13년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    gets를 쓰는 자리에 scanf를 넣으니 아무 문제없이 AC가 뜨네요. gets에 뭔가 비밀이 있나본데, 아시는 분은 댓글 좀 달아주세요~


    13년 전 link
  • JongMan
    JongMan

    허허.. 역시 예상대로 CRLF 문제군요. -ㅅ-; 저지 입력 파일이 CRLF 로 되어 있어서.. gets() 함수가 CR 까지 버퍼에 읽어들여 버립니다. 반면 scanf 는 CR 에서 끝나게 되고요. 실행 전에 모든 입력 파일에 fromdos 라도 한번 돌려줘야겠네요.

    일단 scanf() 를 쓰시면 되겠고요, 불편 드려서 죄송하고, 고치면 알려드리겠습니다. ㅎㅎ


    13년 전 link
  • Xgate
    Xgate

    다들 아시겠지만 scanf()로 문자열을 입력받을 경우 space인 경우에도 끊깁니다.
    (ex) "abc def" 이렇게 입력되고 scanf로 받으면 abc만 남지요. gets쓰면 다 남습니다.

    enter를 치는 경우 gets는 enter까지 먹고, scanf 쓰면 안먹는데 이건 함수 특성이지요~
    함수 특성때문에 입력 자체를 바꾼다는건 좀.. ㅡㅡㅋ

    함수의 특성을 알고 쓰는게 맞는거 아닐까요??


    13년 전 link
  • 투명드래곤
    투명드래곤

    아하.. 입력이 CRLF로 들어오면 그냥 gets로는 안되는 거였군요 ^^;;
    감사합니다.. 한자리수 accept율의 비밀이 이거였을지도 모르겠네요 ㅋ


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