我不知道我是否應該問這裏或程序員,但我一直在試圖找出爲什麼這個程序不會工作,雖然我已經發現了一些錯誤,但它仍然會返回「x不是素數」 ,即使是這樣。素數的C++程序
#include <iostream>
using namespace std;
bool primetest(int a) {
int i;
//Halve the user input to find where to stop dividing to (it will remove decimal point as it is an integer)
int b = a/2;
//Loop through, for each division to test if it has a factor (it starts at 2, as 1 will always divide)
for (i = 2; i < b; i++) {
//If the user input has no remainder then it cannot be a prime and the loop can stop (break)
if (a % i == 0) {
return(0);
break;
}
//Other wise if the user input does have a remainder and is the last of the loop, return true (it is a prime)
else if ((a % i != 0) && (i == a -1)) {
return (1);
break;
}
}
}
int main(void) {
int user;
cout << "Enter a number to test if it is a prime or not: ";
cin >> user;
if (primetest(user)) {
cout << user << " is a prime number.";
}
else {
cout << user<< " is not a prime number.";
}
cout << "\n\nPress enter to exit...";
getchar();
getchar();
return 0;
}
很抱歉,如果這是過於本地化(在這種情況下,你可以建議我應該問這樣的具體問題?)
我要補充一點,我是很新的C++(和一般的編程)
這是簡單地旨在是的功能和控制測試。
給我們一些什麼時候不起作用的例子。 –
爲什麼不這樣做......在for循環外面添加一個return(1)語句並刪除else if語句,這樣,如果循環完成並且函數未返回,則該數字將成爲素數。 – Sai
一些正確的答案已經發布在下面,但我想補充一些一般的東西。您的回報價值附近的parentesises是多餘的。返回後的值總是在返回之前被計算。 ((a%i!= 0)&&(i == a -1))在兩個檢查周圍的parentesises也是reduntant,雖然這些並不必然是壞的,因爲它們可能會使它更容易閱讀。由於你是一名初級程序員,我希望你知道這一點。接下來,您不檢查提供的輸入是否實際是一個數字,所以如果輸入其他內容,這可能會崩潰。 –