我有以下簡單的代碼:如何使cin >>不將float轉換爲整數?
#include <iostream>
int main()
{
int a;
std::cout << "enter integer a" << std::endl;
std::cin >> a ;
if (std::cin.fail())
{
std::cin.clear();
std::cout << "input is not integer, re-enter please" <<std::endl;
std::cin >>a;
std::cout << "a inside if is: " << a <<std::endl;
}
std::cout << "a is " << a <<std::endl;
std::cin.get();
return 0;
}
當我運行上面的代碼和輸入:1.5
,其輸出:a is 1
。僅供參考:我使用gcc 4.5.3編譯並運行代碼。
這意味着如果cin
需要一個整數但看到一個浮點數,它將隱式執行轉換。那麼這是否意味着cin
看到一個浮點數時,它不是在fail()
狀態?爲什麼會出現這種情況?是否因爲C++在>>
運算符上進行了隱式轉換?
我也試過下面的代碼來決定一個給定的輸入數是否整數下面這個職位的想法:testing if given number is integer:
#include <iostream>
bool integer(float k)
{
if(k == (int) k) return true;
return false;
}
int main()
{
int a;
std::cout << "enter integer a"<< std::endl;
std::cin >> a ;
if (!integer(a))
{
std::cout << "input is not integer, re-enter please" ;
std::cin.clear();
std::cin >> a;
std::cout << "a inside if is: " << a <<std::endl;
}
std::cout << "a is " << a <<std::endl;
std::cin.get();
return 0;
}
的代碼塊也無法測試是否a
是因爲它的整數當我用float輸入運行時,只需跳過if
塊。
那麼,爲什麼這是用cin獲取用戶輸入時的情況?如果有時我想輸入爲189
,但偶然輸入了18.9
,在這種情況下將導致18
,這是不好的。那麼這是否意味着使用cin
獲取用戶輸入整數不是一個好主意?
謝謝。
line 4. int a; ---> double a; – enhzflep 2013-03-24 03:56:29
如果你把輸入'a'作爲一個float而不是一個int,那麼檢查'a ==(int)a'是否會告訴你它是否是一個整數。 – Aiias 2013-03-24 03:57:36
cin「知道」它讀取的是什麼類型,根據類型做不同的事情。對於int來說,它讀取數字,並在它看到非數字時立即停止。在你的例子中*不是*讀取整個「1.2」,它在「1」之後停止,因爲下一個字符不是數字。 – 2013-03-24 04:01:56