为何我的C++代码在CodeForces可运行但CodeBlocks陷入输入循环?
问题分析:CodeBlocks中C++程序陷入无限输入循环
刚接触CodeForces,遇到如下问题:我的C++代码在CodeForces编译器可正常运行,但在Windows 10系统的CodeBlocks 20.03(GCC版本8.1.0)中执行时,将测试用例输入粘贴到控制台后,程序陷入无限输入循环,无法输出预期结果。对应题目是CodeForces的236A题,代码如下:
#include<bits/stdc++.h> using namespace std; int main() { set<char> c; char s; while(cin>>s)c.insert(s); cout<<(c.size()%2?"IGNORE HIM!":"CHAT WITH HER!"); }
问题原因
- 循环条件
while(cin>>s)会持续等待输入,直到输入流遇到终止信号或出错。CodeBlocks的Windows控制台里,粘贴完测试用例后,程序无法感知输入已结束,会一直卡在循环里等待新的输入。 - CodeForces在线编译器会自动处理输入结束(读完测试用例就终止输入流),但本地控制台需要手动触发结束信号。
解决办法
有两种实用方式终止输入:
- 手动触发结束:粘贴测试用例后,按下
Ctrl+Z(Windows控制台的输入终止符),再按回车,程序就会结束循环并输出结果。 - 修改代码逻辑:题目输入是单个无空格的字符串,直接读取整行字符串处理更稳妥,避免依赖输入流终止信号,修改后代码如下:
#include<bits/stdc++.h> using namespace std; int main() { set<char> c; string s; cin >> s; for(char ch : s) { c.insert(ch); } cout << (c.size()%2 ? "IGNORE HIM!" : "CHAT WITH HER!"); return 0; }
内容的提问来源于stack exchange,提问作者minh
相关产品推荐
相关产品推荐

