«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

Code Run

개행(new line)에 관하여 본문

코딩 tip

개행(new line)에 관하여

comkiwer 2018. 5. 2. 12:01

개행(행바꿈)을 하는 경우 윈도우와 리눅스는 차이점이 있습니다.


'\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;
}