You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么std::cin单输入行写法会导致C++求最大公约数程序运行异常?

问题原因

你遇到的异常是因为误用了C++逗号运算符,变量b没有被正确赋值,具体逻辑如下:

  • C++运算符优先级中,>> 输入运算符的优先级远高于逗号运算符,所以你写的 cin >> a,b; 实际会被编译器解析为 (cin >> a), b;
    • 括号内的逻辑仅完成变量a的输入,后续的b是单独的表达式,没有任何赋值或输入逻辑,b会保留定义时的未初始化随机垃圾值
  • 你使用的欧几里得减法版求最大公约数的逻辑仅对正整数有效,当b是随机值(可能为负、可能远大于/小于a)时,循环逻辑永远无法满足a==b的退出条件,就会进入死循环
  • 你尝试输入10 8也没用的原因是:cin >> a只会读取第一个数10到a,第二个数8根本没有被读取赋值给b,b还是随机值
修复方案

正确的单行输入写法是连续使用>>运算符:

cin >> a >> b;

这种写法会按顺序读取输入的两个值(空格、换行、制表符分隔都可以),分别赋值给a和b,和原来两行输入的逻辑完全一致。


内容的提问来源于stack exchange,提问作者random_name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:45:03