[英]Floating Point Exception C++ Why and what is it?
我正在為 Euler 項目問題 3 構建一個程序,雖然這可能並不重要,但我目前正在嘗試讓這段代碼接受一個數字並測試它是否為素數。 現在,在我對函數進行故障排除之前,它在輸入數字后立即給我錯誤“浮點異常”。 這是代碼:
int main()
{
int input;
cout << "Enter number: " << endl;
cin>> input;
int i = input/2;
int c;
for (i>0; i--;) {
c= input%i;
if (c==0 || i == 1)
cout << "not prime" << endl;
else
cout << "prime" << endl;
}
return 0;
}
所以本質上為什么它給我一個浮點異常,這甚至意味着什么?
“浮點數”是計算機通常表示非整數的數字的方式——基本上是帶小數點的數字。 在 C++ 中,您使用float
而不是int
來聲明它們。 浮點異常是當您嘗試用浮點數做一些不可能的事情時發生的錯誤,例如除以零。
for (i>0; i--;)
可能是錯誤的,應該是
for (; i>0; i--)
反而。 注意我把分號放在哪里。 條件發生在中間,而不是開始。
浮點異常的原因有很多。 查看您的代碼,您的 for 循環似乎有點“不正確”。 看起來可能被零除。
for (i>0; i--;){
c= input%i;
那是在某個時候被零除,因為你正在遞減 i。
由於此頁面是 google 搜索“c++ 浮點異常”的第 1 個結果,因此我想添加可能導致此類問題的另一件事:使用未定義的變量。
問題出在代碼片段中的 for 循環中:
對於 (i > 0; i--;)
在這里,您的意圖似乎是進入循環 if (i > 0)並在 for loop 完成后將i 的值減一。
它是那樣工作的嗎? 讓我們來看看。
查看 for() 循環語法:
**for ( initialization; condition check; increment/decrement ) {
statements;
}**
初始化只在循環開始時執行一次。 密切注意“;” 在您的代碼片段中並使用 for 循環語法將其映射。
初始化:i > 0:只執行一次。 對您的代碼沒有任何影響。
條件檢查: i --:遞減。
Here, i is used for condition check and then it is decremented.
Decremented value will be used in statements within for loop.
This condition check is working as increment/decrement too in your code.
讓我們停在這里看看浮點異常。
它是什么? 一個簡單的例子是除以 0。您的代碼也發生了同樣的情況。
當條件檢查中 i 達到 1 時,條件檢查驗證為真。
由於后遞減,當它進入 for 循環時 i 將為 0。
Modulo operation at line #9 results in divide by zero operation.
有了這個背景,你應該能夠解決 for 循環中的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.