Mac下VS Code集成终端多行输入时输出穿插问题求助
Mac上VS Code集成终端粘贴多行输入时输出与输入穿插的解决方案
问题重现
在完成CF Round 900 (Div.3) C题时,遇到以下异常:Mac系统下VS Code集成终端粘贴多行输入后,程序输出会穿插在输入内容中,但外接终端运行程序完全正常,Python程序也出现相同问题。
测试输入
12 5 3 10 5 3 3 10 10 55 6 5 20 2 1 26 187856 87856 2609202300 200000 190000 19000000000 28 5 2004 2 2 2006 9 6 40 47202 32455 613407217 185977 145541 15770805980
集成终端显示效果
12 5 3 10 5 3 3 10 10 55 6 5 20 2 1 26 187856 8785YES NO YES YES NO 6 2609202300 200000 190000 19000000000 28 5 2004 2NO YES NO 2 2006 9 6 40 47202 32455 613407217 185977 145541NO NO YES 15770805980 YES
测试代码(Java)
import java.util.*; import java.io.*; public class C { public static void main(String[] args) throws IOException{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(in.readLine()); for (int t = 0; t < T; t ++) { StringTokenizer st = new StringTokenizer(in.readLine()); float n = Float.parseFloat(st.nextToken()); float k = Float.parseFloat(st.nextToken()); float x = Float.parseFloat(st.nextToken()); if ((x<(k/2*(1+k)))||(x>k/2*(2*n-k+1))) {System.out.println("NO");} else {System.out.println("YES");} } } }
解决方案
方案1:启用VS Code集成终端的粘贴括号功能
- 打开VS Code设置(快捷键
Cmd + ,) - 搜索
terminal.integrated.enablePasteBracketing,确保选项设置为true - 重启VS Code集成终端(点击终端面板垃圾桶图标重新打开)
方案2:配置Shell的粘贴括号支持(以zsh为例)
Mac默认使用zsh,若方案1无效,可修改zsh配置:
- 执行命令打开配置文件:
open ~/.zshrc - 在文件末尾添加:
autoload -Uz bracketed-paste-magic zle -N bracketed-paste bracketed-paste-magic - 保存后执行
source ~/.zshrc使配置生效 - 重启VS Code集成终端
方案3:切换集成终端的Shell类型
若zsh仍有问题,可尝试切换为bash:
- 打开VS Code设置,搜索
terminal.integrated.defaultProfile.osx - 将默认Shell改为
bash - 重启集成终端后测试
额外代码优化提示(算法竞赛相关)
代码中使用float处理大整数会导致精度丢失(如2609202300超出float精确表示范围),建议改用long类型并使用整数运算避免溢出:
import java.util.*; import java.io.*; public class C { public static void main(String[] args) throws IOException{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(in.readLine()); for (int t = 0; t < T; t ++) { StringTokenizer st = new StringTokenizer(in.readLine()); long n = Long.parseLong(st.nextToken()); long k = Long.parseLong(st.nextToken()); long x = Long.parseLong(st.nextToken()); long min = k * (k + 1) / 2; long max = k * (2 * n - k + 1) / 2; if (x < min || x > max) { System.out.println("NO"); } else { System.out.println("YES"); } } } }
内容的提问来源于stack exchange,提问作者MonsieurSeed
相关产品推荐
相关产品推荐

