【问题标题】:Multiple `cin` is not giving correct answer多个`cin`没有给出正确答案
【发布时间】:2020-11-03 23:56:53
【问题描述】:

直接用1212121221121212 + 34343434343434 = 1246464655464646cin 中输入值没有解决办法。为什么?

#include <iostream>
using namespace std;

int main() {
    long int a, b, c;
    char op, eq;
    cout << "Input the formula: ";
    cin >> a >> op >> b >>eq >> c;
    long int sum;
    if (op == '+') {
        sum = a + b;
    }
    else {
        sum = a - b;
    }
    
    if (sum == c) {
        cout << "Correct";
    }
    else {
        cout << "No Solution";
    }
    return 0;
}

【问题讨论】:

  • 34343434343434 是一个 BFN,也就是一个大数。它可能不适合int。检查所有 IO 事务后的流状态,以确保您阅读了您想阅读的内容。
  • 或者,只使用更大的整数类型,例如long long intint64_t

标签: c++ cin


【解决方案1】:

除了缺乏对错误用户输入的检查之外,逻辑看起来很合理。添加一个简单的错误输入检查后

if (std::cin >> a >> op >> b >> eq >> c) // testing for valid input
{
    ...
}
else
{
    std::cout << "bad input. Buh-bye!"; // inform user of bad input
}

1212121221121212 + 34343434343434 = 1246464655464646 的用户输入导致输出错误输入。再见!

错误输入的最可能原因是给出的数字超过了 32 位整数的最大容量(大多数台式计算机上long int 的常见解释)。使用int_least64_t 将数字容量增加到至少 64 位似乎可以解决问题,至少目前是这样。

#include <iostream>
#include <cstdint> // needed for int_least64_t

int main()
{
    int_least64_t a, b, c; // guaranteed larger type
    char op, eq;
    std::cout << "Input the formula: ";
    if (std::cin >> a >> op >> b >> eq >> c) // testing for valid input
    {
        int_least64_t sum; // guaranteed larger type
        if (op == '+')
        {
            sum = a + b;
        }
        else
        {
            sum = a - b;
        }

        if (sum == c)
        {
            std::cout << "Correct";
        }
        else
        {
            std::cout << "No Solution";
        }
    }
    else
    {
        std::cout << "bad input. Buh-bye!"; // inform user of bad input
    }
    return 0;
}

当数字再次变得太大而无法放入int_least64_t 时,问题将再次出现。如果您必须支持这样的数字,请考虑使用任意长度的整数库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2015-06-23
    • 1970-01-01
    • 2019-03-07
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多