社区讨论
警示后人,如果你是 scanf 党人(OLE + RE 或者 全 TLE)
P2282[HNOI2003] 历史年份参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi1vbp0r
- 此快照首次捕获于
- 2025/11/16 23:26 3 个月前
- 此快照最后确认于
- 2025/11/18 10:33 3 个月前
如果你是全 OLE 或者 OLE 9 个点 + RE 1 个点那么你可能使用了如下输入方式:
CPPwhile (scanf("%s", S + 1) != EOF) {
//...
}
如果你全部 TLE,那么你可能使用了如下输入方式:
CPPwhile (scanf("%s", S + 1)) {
//...
}
如果你想要取得 的好成绩,你需要如下输入方式:
CPPwhile (~scanf("%s", S + 1)) {
//...
}
其中
~scanf("%s", S + 1) 等价于 scanf("%s", S + 1) != -1。具体原因(可能):
-
该题目中 scanf 读取失败返回值可能不是 EXACTLY EOF,于是挂了。
-
理论上没任何返回值时 scanf 会是 0,本题应该有返回值,所以
while (scanf("%s", S + 1))死了。
本题读取失败没有返回 EOF,直接返回 -1 了(大概率是吧)。
回复
共 2 条回复,欢迎继续交流。
正在加载回复...