为什么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
相关产品推荐
相关产品推荐

