在 C++ 中没有输入时读取数字

Reading a number when no input given in C++

提问人:ByteEater 提问时间:3/9/2023 最后编辑:curiousguyByteEater 更新时间:3/9/2023 访问量:77

问:

当提供文件末尾或空行作为输入时,以下代码是否容易出现未定义的行为?

  unsigned long long i;
  cin >> i;

从我使用 Compiler Explorer 观察到的情况来看,它似乎得到了一些随机值,很可能是碰巧在该内存位置的值。但通常情况下,当编译器以这种方式行事时,标准实际上指定了 UB。i

C++ 输入 IOSTREAM CIN iStream

评论

5赞 Retired Ninja 3/9/2023
任何不检查输入返回值以查看其是否成功的代码都容易出现不可预知的行为。
1赞 Nathan Pierson 3/9/2023
cin >> i;可能会以几种不同的方式失败,我相信这取决于它何时失败会发生什么。如果它成功从流中读取,但无法将值转换为 ,则定义为将设置为 的行为。但是,如果故障发生得更早,“没有输入发生”,这将使未初始化。iunsigned long longi0i
1赞 tadman 3/9/2023
PSA:使用合理的类型定义,如 uint64_t
3赞 Pete Becker 3/9/2023
@tadman — 注意,与 不同,不需要存在。unsigned long longuint64_t
3赞 heap underrun 3/9/2023
@tadman 你说的“微小”是什么意思? 保证长度至少为 64 位。另外,我看不出在 OP 的情况下如何需要任何特定尺寸。无论如何,如果只有最小值很重要,他可以改用(这比因为保证存在而更便携)。unsigned long longuint_least64_tuint64_t

答: 暂无答案