2013-03-17 69 views
1

而使用std :: CIN >>数以下列方式:CIN:检查次数为整数或浮点即使浮点值是1.000

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开头。如果行以浮点数开始,我想读取1000个浮点数。如果它是一个int,我想读取这个浮点数。我知道我可以将浮点数转换为int,并检查铸造的int是否等于浮点数,但当浮点数为1.000等平坦值时,这不起作用。

我宁愿不看使用函数getline整行(),因为后记分割是耗时的,我已经知道,所有输入的是,除了可能是第一个数字浮动。另一种方法是将每行的第一个值作为字符串读入并检查它是否包含句点。有没有办法,没有首先读取输入作为一个字符串,检查这个?或者是需要的字符串步骤。

+0

由于“一把手”被声明为float则总是被储存为float,无论用户是否进入1.000或只是简单的1因此,没有,没有办法,你的代码可能可以区分这两种情况。 – Stuart

回答

4

你真的需要阅读它作为一个字符串,以检查是否有一个点?

为什么不先取一个整数?

int intNum = 0; char ch; 

cin >> intNum; 
cin.get(ch);  

现在你可以使用另一个整数读&结合的浮动,如果有保险业监督点即ch=='.'

+0

现在这是一个有趣的答案。我没有想到这一点! –

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; 
} 
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.”这样的值可能是有效的),这应该按照你的预期工作。