Code Run
개행(new line)에 관하여 본문
개행(행바꿈)을 하는 경우 윈도우와 리눅스는 차이점이 있습니다.
'\r' : carriage return
'\n' : line feed
[ new line ] = (carriage return) + line feed
윈도우는 옛날 타자기의 타이핑 방법을 그대로 따른 방법으로 '\r', '\n' 두 개의 문자를 사용합니다.
리눅스에서는 좀 더 단순화 하여 '\n'만을 사용합니다.
채점 데이터는 리눅스에서 작성된 것과 윈도우에서 작성된 파일이 혼재되어 있습니다.
따라서 위 문제의 경우 gets() 또는 fgets()함수를 사용하는 경우 윈도우에서
실행할 때는 잘 나오지만 채점 서버는 리눅스 이므로 다른 결과가 나올 수 있습니다.
여러 방법으로 이를 해결할 수 있겠지만 그 중 한 가지를 소개하면 아래와 같습니다.
fgets()에서는 개행문자('\r', '\n')가 문자열에 포함되어 입력된다는 것에 유의합니다.
1. 라이브러리 함수를 사용하지 않는 경우
#include <stdio.h>size_t strlen(const char* s, int len = 0) {while (*s++) len++;return len;}int main() {//freopen("input.txt", "r", stdin);// ...char buf[110];fgets(buf, 109, stdin);int len = strlen(buf);while (len && (buf[len - 1] == '\r' || buf[len - 1] == '\n')) {buf[--len] = 0;}return 0;}2. 라이브러리 함수를 사용하는 경우#include <stdio.h>#include <string.h>int main() {//freopen("input.txt", "r", stdin);// ...char buf[110];fgets(buf, 109, stdin);strtok(buf, "\r\n");return 0;}