AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

关于 cout << '\0' 这一抽象行为的教训

作者: 作者的头像   梓柒. ,  2025-07-03 22:51:37 · 湖北 ,  所有人可见 ,  阅读 3


0


博主最近也是在准备打 ruicom,一路刷到了 2022 年省赛第 4 题,出现了以下抽象代码:

cout << (flag?' ':'\0');

因为众所周知pta的题目经常要求一行输出末尾不能有多余的空格。结果就WA了一片。一开始我不知道是这个地方出了问题,debug两个小时都没找到原因,气急败坏上网找题解。

然后开始用fc大法准备造测试样例,看我的代码问题到底出在哪里。结果我的代码重定向到txt后,输出了稀奇古怪的字符,然后txt的编码格式也强制改成了 UTF-16 BE。仔细思考了一下,我的输出打印到文件应该是出现了 UTF-8 不支持的字符。或者notepad觉得这份文件有更好的编码解读方式。但奇怪的是两者在命令行的输出是完全一样的。

联想到了之前在实验室干活,把代码的输出重定向到文件里,发现一堆的tqdm条像锯齿一样的,究其原因就是'\r'在文件里只会以单个字符的形式出现。然后目光落在了'\0'上,cout真的把这玩意打出来了,但是在命令行时不显示,在文件里就是一个字节的字符。。。

浪费我两个小时,以后再也不干这样的sb事情了。。。救命

1 评论


用户头像
梓柒.   2025-07-03 22:52 · 湖北         踩      回复

其实if(flag) cout << ' '就好了


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息