为什么代码在本地IDE运行正常,CodeChef IDE报SIGCONT错误?
问题分析
代码功能验证
- 你的代码逻辑本身没有问题,完全符合题目的要求:
- 正确计算了每个单词首次输入的时间,左右手同区按键加4、异区加2,首字母固定2秒
- 重复输入的单词取首次计算时间的一半累加,逻辑正确
- 用map缓存已出现单词的耗时,实现也没问题
无限输出0的原因
- 根本原因是CodeChef IDE运行时未提供有效输入:
- 当
std::cin >> t读取输入失败时(比如没有输入、输入格式错误、输入流结束),C++11之前的版本不会初始化变量t,值是不确定的。如果t恰好是负数,while(t--)就会变成死循环 - 后续的
std::cin >> n同样读取失败,n如果被初始化为0,内层循环不会执行,count保持初始值0,每次外层循环都会输出0,就出现了你看到的无限输出0的现象
- 当
SIGCONT错误的原因
- SIGCONT本身不是程序错误,是操作系统发给暂停进程的继续执行信号:
- CodeChef IDE的运行环境检测到你的程序长时间等待输入,会先将进程暂停,尝试恢复时就会发送SIGCONT信号,IDE默认会将这个信号标记为运行时错误抛出,本质还是程序异常等待输入导致的
解决方法
- 如果你要在CodeChef IDE测试代码,务必在IDE的输入框中填写符合题目格式的测试用例再运行
- 可以在输入后增加校验逻辑避免死循环,比如:
std::cin >> t; if (!std::cin || t <=0) return 0;
- 不需要在意IDE运行的SIGCONT提示,直接将代码提交到题目评判系统即可正常判题,正式判题环境不会触发这个信号
内容的提问来源于stack exchange,提问作者Dishant Singh
相关产品推荐
相关产品推荐

