《洛谷全站帮助》中说,由于 Linux 中的换行符 \n 与 Windows 中的 \r\n 不同,而有些数据在 Windows 中生成,却需要在 Linux 环境下评测,因此可能程序在本地的正确性与在洛谷上略有差异。不过,我还是好奇于它的不同所在,便为此在 Windows 电脑上尝试了一番。不过,由于 Windows 的默认换行符如上文所说,是与 Linux 不同的,所以我不得不用程序来进行文件写操作了:
#include<cstdio>
int main(){
freopen("1.out","w",stdout);
printf("1\n2\n3");
}
打完这段代码,我想:本代码中输出的字符串只包含 1,\n,2,\n,3 这 5 个字符,它应该不会再画蛇添足地输出(或接受)一个 \r 吧!令我大出所料的是,当程序运行后,1.out 的大小却是 7(很显然,在记事本里的数据多了 2 个 \r)!
难道,系统(或程序)把 \n,\r\n 这两个截然不同的东西混为一谈了?这真是让我难以置信,想用评测机试一次。结果,当我多输出了一个 \r 字符后,洛谷评测机不但不把它看做多此一举,反还让我 AC 了(不过 \n\r,\n\r\n 之类是不行的)!
尽管今天我已经做了大量尝试,我还是不明白 \n 和 \r\n 明明有一字符之差,却像是“一回事”的原因。 那么,你们知道这是由 Windows,程序,还是洛谷评测机引起的吗?