2013-08-18 30 views
0

我遇到了一個以float作爲輸入的問題,並檢查輸入是否在10到100之間,否則再次輸入。問題的其餘部分遵循k的這個值,這很容易解決。但我得到的真正問題是驗證。驗證以下條件的輸入

scanf("%f",&k); 
    if(k>10.0 && k<100.0) 
    scanf("%f",&k); 
    else 
    { 
    ......//my code 
    } 

但我提交時,它給了錯誤的答案,真正的問題是在

 #[email protected] 
     #[email protected] 

由於此輸入,而不是去別的部分,它去了,如果一部分,儘管輸入像

 #Input-10 

得到滿足。

任何人都可以給我解決這個問題的地方,在這個範圍內的浮點數和整數類型的輸入只有滿足,否則不會。

回答

1

您正在檢查自己的狀況。反轉的跡象,你會很好。像:

if(k<=10.0 || k>=100.0) //if(k<10.0 || k>100.0) If you want to include 10 and 100 
    printf("invalid input range"); 

以及簡化程序

do 
{ 
    scanf("%f",&k); 
}while(k<=10.0 || k>=100.0); 
+0

C標準強制要求所有花車可表示爲雙打,即使浮點系統不符合IEEE 754.所以,'K <10.0f && k> 100.0f'和只要10和100與浮子完全一樣,k0 <10.0 && k> 100.0'就等同。這實際上是任何提供浮動的C編譯器。 –

+0

@EricPostpischil';'是一個錯字。並感謝您的意見。糾正它。 – Saksham

+0

@PascalCuoq感謝您的輸入。糾正它。 – Saksham

2

你有你的比較運算符混了(似乎只有當你得到有效輸入你重試,而不是無效的輸入)。此外,您只能再次嘗試一次,但我懷疑您希望繼續重試,直到您獲得有效的輸入。你可以這樣做:

#include <iostream> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    double k; 
    do{ 
    cin>>k; 
    }while(k<=10||k>=100); 

    //the rest of your code goes here 
    return 0; 
} 
+0

'void main()'是無效的C++,由於您沒有定義'k',所以無法編譯。 –

+0

通過編輯修復,謝謝 – dallasstar

0

編輯,因爲保羅指出10.0可能不是一個正確的例子來解釋這一點。

使用float時,您不能安全地使用== <或>運算符。原因是輸入爲1.1時的數字在使用非整數類型時不會是1.10000000000000000。因此,定義一個特定的誤差閾值增量,這可能是兩個最接近的浮點數之間最好的分辨率。 因此,如果你的10是一個計算值而不是硬編碼的,那麼float 10 = getXX(someinput);假設getXX()基於一些計算返回一些結果 float hundred = getXX(someinput);

然後做如K對比>(十三角)& &ķ<(百+增量)

這應該是足夠的,我相信。

因此,不要在沒有小誤差修正因子的情況下進行漂浮/雙打關係操作!

這裏是一個片段進行論證http://ideone.com/dxS9OI

#include <stdio.h> 

int main(void) { 

    float eleven=11.0; 
    float one_dot_1=1.1; 
    float elevenUsingSummation = 0; 
    int i=0; 
    for(i=0; i<10; i++) 
    { 
     elevenUsingSummation+=one_dot_1; 
    } 
    printf("------------------------------\n" 
     "Floating point testing example \n" 
    "one_dot_1(2.10)=%2.10f, one_dot_1(2.20)=%2.20f\n" 
    "eleven(2.10)=%2.10f, eleven(2.20)=%2.20f\n" 
    "elevenusingsubmission(2.10)=%2.10f, elevenusingsubmission(2.20)=%2.20f\n" 
    "(elevenUsingSummation==eleven) evaluates to %s\n", 
    one_dot_1, one_dot_1, eleven, eleven, elevenUsingSummation, elevenUsingSummation, 
    elevenUsingSummation==eleven?"True":"False" 
    ); 

    return 0; 
} 
+0

一篇相同的文章是 http://www.learncpp.com/cpp-tutorial/25-floating-point-numbers/ – Abhinav

+0

你說的一些將是真的很多時候,但有很多數字可以精確地表示爲浮點數,其中10個就是其中之一。 –

+0

好吧,它使代碼更可靠,我會說。使用==比較浮點和喜歡的情況可能會很危險! – Abhinav