博主最近也是在准备打 ruicom,一路刷到了 2022 年省赛第 4 题,出现了以下抽象代码:
cout << (flag?' ':'\0');
因为众所周知pta的题目经常要求一行输出末尾不能有多余的空格。结果就WA了一片。一开始我不知道是这个地方出了问题,debug两个小时都没找到原因,气急败坏上网找题解。
然后开始用fc大法准备造测试样例,看我的代码问题到底出在哪里。结果我的代码重定向到txt后,输出了稀奇古怪的字符,然后txt的编码格式也强制改成了 UTF-16 BE。仔细思考了一下,我的输出打印到文件应该是出现了 UTF-8 不支持的字符。或者notepad觉得这份文件有更好的编码解读方式。但奇怪的是两者在命令行的输出是完全一样的。
联想到了之前在实验室干活,把代码的输出重定向到文件里,发现一堆的tqdm条像锯齿一样的,究其原因就是'\r'
在文件里只会以单个字符的形式出现。然后目光落在了'\0'
上,cout真的把这玩意打出来了,但是在命令行时不显示,在文件里就是一个字节的字符。。。
浪费我两个小时,以后再也不干这样的sb事情了。。。救命
其实
if(flag) cout << ' '
就好了