首页 文章

cin:检查number是一个整数还是float,即使float值是1.000

提问于
浏览
1

在以下方式使用std :: cin >> number时:

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多个浮点数 . 如果它是一个int,我想读取那个浮点数 . 我知道我可以将float转换为int并检查casted int是否等于float,但是当float具有平坦值(例如1.000)时,这不起作用 .

我更喜欢不使用getline()来读取整行,因为将它拆分后很费时,我已经知道所有输入都是浮点数,除了可能是第一个数字 . 另一种方法是将每行的第一个值作为字符串读入,并检查它是否包含句点 . 有没有一种方法,没有先读取输入作为字符串,检查这个?或者是需要的字符串步骤 .

4 回答

  • 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”这样的值可能有效),这应该按预期工作 .

  • 4

    你真的需要把它读作一个字符串来检查是否有一个点?

    为什么不先取整数呢?

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

    现在你可以使用另一个整数读取并组合到一个浮点数,如果有一个点,即 ch=='.'

  • 0

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

  • 0

    一种方法是以字符串形式读取第一个字段,然后测试它是否包含小数位 . 如果是这样,那么将其投入浮动并阅读更多内容 . 否则,将其转换为整数并读取那么多 . 这样可以正常工作,因为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 many\n";
            int myInt = atoi(myStr.c_str());
    
            for(int k =0; k < myInt; k++)
            {
                std::cin >> myVal;
            }
    
        }
    
        return 0;
    }
    

相关问题