2016-10-15 38 views
0

我在一段代碼中遇到了一些麻煩,想問我能否得到一些幫助。基本上我正在創建一個程序,它將劃分用戶輸入的兩個數字,如果輸入的數字中的任何一個爲0,我想打印一條消息,但是這部分代碼無法正常工作。以下是我的代碼。C++識別輸入值爲0

int main() 
{ 


float n1 = 0.0, n2 = 0.0, quotent = 0.0; 

int firstNumberRead = 0; 

int secondNumberRead = 0; 



firstNumberRead = scanf("%f", &n1); 

secondNumberRead = scanf("%f", &n2); 

//check that the attempt to read the number was successful 
if (firstNumberRead && secondNumberRead == 1) 
{ 
    //divide the first number by the second number 
    quotent = (n1/n2); 

    //print quotent 
    printf("%f", quotent);enter code here 
} 
else if (firstNumberRead || secondNumberRead == 0) 
{ 
    printf("invalid input - divide by zero is not allowed"); 
} 
else 
{ 
    printf("invalid input"); 
} 
scanf("%f", &n1); 
return (0); 

}

+3

'firstNumberRead && secondNumberRead == 1'很可能不是你實際打算。研究C++中的條件如何工作。 – user2296177

回答

4

有許多問題與此代碼。

if (firstNumberRead && secondNumberRead == 1) 

你可能錯了關於C++的條件是如何工作的,請檢查您的泛讀教材進行了詳細的exaplanation。你最有可能想說的話

if(firstNumberRead == 1 && secondNumberRead == 1) 

這隻會檢查兩個scanf調用設法讀取值。您需要檢查if表達式中的實際值。

的其他問題進行檢查0不正確的變量在分子和分母(你再次檢查firstNumberReadsecondNumberRead你應該檢查n1n2代替:

if (n1 == 0 || n2 == 0) 

通常這是一個壞主意,使用運營商==爲浮點變量,但你可能會說,這是有道理的分母(所有其他國家都但從算術的角度法律),但你可能想看看std::abs,並檢查它是否是比一些小量小例如:。

if (abs(n1) < 0.001 || abs(n2) < 0.001) 

最後,你可能想是這樣的:

if (firstNumberRead == 1 && secondNumberRead == 1) 
{ 
    if (n1 == 0 || n2 == 0) 
    { 
     printf("invalid input - divide by zero is not allowed"); 
    } 
    else 
    { 
     //divide the first number by the second number 
     quotent = (n1/n2); 

     //print quotent 
     printf("%f", quotent); 
    } 
} 
else 
{ 
    printf("invalid input"); 
} 
+1

@SeanCampbell如果它解決了您的問題,請接受答案。您可以通過點擊此答案的投票下的複選標記圖標來完成此操作。 – user2296177