ENCRYPT 관련 질문입니다.

  • slow13
    slow13
    #include<stdio.h>
    
    int main() {
        int cases;
        char word[101] = { 0 };
        scanf("%d", &cases);
        while (cases <= 10 && cases--) {
            scanf("%s", word);
            for (int a = 0; word[a] != 0; a += 2)
            {
                printf("%c", word[a]);
            }
            for (int a = 1; word[a] != 0; a += 2)
            {
                printf("%c", word[a]);
            }
            printf("\n");
        }
    }
    

    무엇이 잘못된것인지 도저히 이해할 수가 없어서 질문 올립니다.
    초기화 부분에서 잘못된것인지...
    자신감이 떨어져가는 것 같습니다 ㅠㅠ


    8년 전
2개의 댓글이 있습니다.
  • reedong
    reedong

    최초 한 번 string를 입력받고 테스트하는 것에서는 문제가 없습니다만 이후에 초기화가 안되어서 다음 테스트를 할 때 이전의 string이 영향을 주는 경우가 발생할 수 있겠네요.

    테스트를
    2
    ABCDEFGHIJK
    ABCD
    등으로 테스트 해보세요 결과가 이상하게 나올겁니다
    해결방법으로는
    char word[101]로 하지말고
    동적할당으로 하면 될겁니다.


    8년 전 link
  • hyunhwan
    hyunhwan

    두가지 문제가 있습니다.
    1. 테스트 케이스를 위한 while 반복의 조건문에 의해 10개보다 많은 테스트 케이스가 입력되면 처리가 되지 않고 넘어갈 소지가 있습니다.
    2. 동적할당의 문제보다는 word[a] != 0부분에 문제가 있습니다. strlen으로 문자열의 길이를 구하고 a < len과 같이 처리하면 문제를 해결 할 수 있을 것으로 봅니다. 조금 덧붙이자면, 현재 코드는 문자열에 대한 올바른 index를 넘어가는 문제를 가지고 있습니다.


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