char a[31];
char b[31];
DEV C++에선 에러나 워닝없이 잘 돌아가는거 같은데 왜 퀴즈에선 틀렸다고 나오나요??
(도장_ 관리자님이 수정함 - 원문 제출일: 2020년 6월 12일, 금요일, 오후 10:36)
Visual Studio에서 테스트 케이스를 넣으면 0이 출력됩니다.
1이 출력되게 해야 합니다.
반복문에서 strlen을 쓰면 안 됩니다.
데이터의 값이 변경될 수 있기 때문에 strlen을 반복문에서 쓰면 안 되고,
반복할 때마다 strlen으로 문자열의 길이를 센다면 비효율적인 프로그램이 될 것입니다.
반복문 내부에서 데이터를 변경할 경우 버그가 생길 가능성이 높고,
한 번 반복할 때마다 문자열의 길이를 세니까 비효율적입니다.
문자열이나 배열은 초기화해야 합니다.
a는 scanf에서 입력 받으니 마지막에 자동으로 \0 널문자가 붙으니까 문자열 끝이 처리되고, 문자열 관련 함수가 제대로 동작합니다.
그러나 b는 scanf에서 입력 받지 않으니 문자만 복사해서는 \0 널문자가 생략되니까 문자열 끝까지 진행하게 됩니다.
UNIT 6 참고해서 디버거 사용법 공부하고 중단점 찍어서 프로그램이 실행 중에 실제 데이터가 어떻게 되는지 관찰하면 코드를 더 잘 이해할 수 있습니다.
디버거 사용은 기본 중의 기본입니다.
잘못된 코드이므로 통과되지 않는 게 맞습니다.
DEV C++는 오류를 정상적으로 처리하는 매우 관대한 프로그램이므로 추천하지 않습니다. 절대 쓰시면 안 됩니다. 온라인 심사가 없으면 잘못된 코드를 작성하고도 프로그램이 동작한다는 이유로 제대로 동작하는 코드를 작성했다고 생각할 수 있고, 잘못된 코딩 습관을 배우게 될 가능성이 매우 큽니다. 이는 회사에서 가장 싫어하는 유형의 코딩 습관이 될 것입니다.
처음부터 엄격한 컴파일러로 깐깐하게 배우는 게 좋습니다. 잘못든 습관은 안 배운 사람보다 고치기 어렵습니다.