我做了一個小程序,它生成素數並讓用戶檢查一個數字,看看它是否爲素數。問題是,我不確定如何正確設計它。這是程序:關於正確設計程序的疑惑C++
#include <iostream>
#include <vector>
typedef unsigned long long bigint;
std::vector<bool> sieve(size_t size)
{
std::vector<bool> primelist(size);
primelist[0] = false;
primelist[1] = false;
for (bigint i = 2; i < size; ++i) { primelist[i] = true; }
for (bigint i = 2; i * i < size; ++i)
{
if (primelist[i])
{
for (bigint j = i; j * i < size; ++j)
primelist[i*j] = false;
}
}
return primelist;
}
int main()
{
bigint range;
bigint number;
std::vector<bool> primes;
std::cout << "Enter range: " << std::endl;
std::cin >> range;
primes = sieve(range);
while (1)
{
std::cout << "Enter number to check: " << std::endl;
std::cin >> number;
if (primes[number])
std::cout << "Prime" << std::endl;
else
std::cout << "Not prime" << std::endl;
}
return 0;
}
的基本流程我要實現的是:輸入範圍,/處理輸入/輸入號碼查詢,/處理輸入/
我也想給用戶一個選擇在任何給定的時間,通過寫命令狀「變化範圍號」更改範圍
我有幾個問題是:
我想如果用戶輸入的程序已得到控制範圍更大如果用戶基本上超過任何限制(例如,如果他輸入的範圍是100,那麼如果他檢查101),將會捕獲異常。我知道這需要使用try/catch/throw來實現,但我不知道如何做到這一點,同時保持選項來改變範圍,而不需要使我的代碼意大利麪代碼。
另外,我想這些錯誤是枚舉類型的(我讀的枚舉是良好的例外),像
enum errors
{
OUT_OF_RANGE = 1, //Out of the range specified by the user
INCORRECT_VALUE, //If user input "one" instead of 1
RANGE_SIGNED, //If user inputs a signed value for range
NUM_LIMITS //Number exceeds unsigned long long
};
我不知道如何使用異常處理,而不是用它來提與枚舉。我該如何保持這個程序的安全和運行,同時遠離意大利麪代碼?
我非常困惑。如果有人能夠幫助我正確地設計這個程序,並保持可讀性和效率,它將真正改進我未來的程序設計。
感謝您的閱讀!
專注於* one *的東西,爲了學習;這也將幫助你的問題得到答案。 – Jon 2011-03-04 18:33:28
「我讀過枚舉對異常很有用......」,而不是'std :: exception'? – 2011-03-04 18:35:30
@Jon這是我混亂的副作用。我一直遇到涉及用戶輸入的程序問題。我真的需要有人幫助我理解這一切。 @Travis我不知道std :: exception是什麼。我讀過關於異常處理的知識,但我不太瞭解。剛剛變得更加困惑。 – Lockhead 2011-03-04 18:35:35