cin:即使浮点值为1.000,也要检查数字是整数还是浮点

cin: check if number is an integer or float even if float value is 1.000

本文关键字:检查 数字 整数 cin      更新时间:2023-10-16

同时以以下方式使用std::cin>>编号:

float number;
while(std::cin >> number) {
     //perform a check here if possible
    //if number does not contain a decimal point do this
    for(int i = 0; i < number; i++) {
        std::cin >> readMoreFloats; 
    }
    //otherwise read 1000 more floats
}

有没有一种方法可以区分以下类型的线路:

1.500 (1000 more floats)
2 2.000 2.000

行将以float或int开头。如果行以float开头,我想再读取1000个float。如果它是一个int,我想读取浮点数。我知道我可以将float强制转换为int,并检查强制转换的int是否等于float,但当float的值为1.000时,这将不起作用。

我宁愿不使用getline((读取整行,因为在单词后拆分它很耗时,而且我已经知道除了第一个数字之外,所有的输入都是浮点的。另一种方法是将每行的第一个值作为字符串读取,并检查它是否包含句点。有没有一种方法可以在不首先将输入作为字符串读取的情况下进行检查?还是需要字符串步骤。

您真的需要将其作为字符串读取以检查是否有点吗?

为什么不先取一个整数呢?

int intNum = 0; char ch;
cin >> intNum;
cin.get(ch);     

现在您可以使用另一个整数read&如果有点,则合并为浮点,即ch=='.'

搜索点,如果它们是字符串,则将其解析为字符串。

实现这一点的一种方法是将第一个字段作为字符串读取,然后测试它是否包含小数点。如果是,请将其转换为浮点值并阅读更多内容。否则,将其强制转换为整数并读取该整数。这很好,因为cin也会自动在字符串的空格处中断。

我认为以下代码应该关于工作:

#include <iostream>
#include <string>
int main()
{
    std::string myStr;
    std::cin >> myStr;
    float myVal = 0;
    if(myStr.find('.') != std::string::npos)
    {
        std::cout << "Is floating point, now convert this and read lots.n";
        float myFloat = atof(myStr.c_str());
        for(int k =0; k < 1000; k++)
        {
            std::cin >> myVal;
        }
    }
    else
    {
        std::cout << "Is integer, so read just that manyn";
        int myInt = atoi(myStr.c_str());
        for(int k =0; k < myInt; k++)
        {
            std::cin >> myVal;
        }
    }
    return 0;
}

假设我正确理解了这个问题,也许你需要这样的东西:

using namespace std; // I'm lazy
string temp;
int number;
while(std::cin >> temp)
{
    number = 0;
    if (temp.find(".") != string::npos) number = 1000; // string has decimal point
    else istringstream(temp) >> number; // no decimal point, probably an integer
    for(int i = 0; i < number; i++) {
        std::cin >> readMoreFloats; 
    }
}

我们使用检查字符串是否有小数点的基本方法来指示它是否为浮点值。假设您的输入文件总是正确格式化,并且总是省略整数的小数点(即使根据某些解释,像"2."这样的值可能是有效的(,这应该如您所期望的那样工作。