Matlab'da basit bir program yazıyorum ve kullanıcının girdiği değerin doğru bir tam sayı olduğundan emin olmanın en iyi yolunu merak ediyorum. Şu anda bu kullanıyorumBir kullanıcının Matlab'da bir tamsayı girmesini zorlaştırmanın en iyi yolu
: Gerçekten iyi bir yolu olmalı biliyorum Ancak
while((num_dice < 1) || isempty(num_dice))
num_dice = input('Enter the number of dice to roll: ');
end
bu her zaman işe yaramaz çünkü. Ayrıca bir try catch bloğu kontrol etmek için hata eklemek istiyorum. Matlab'a yeniyim, bu yüzden bu konudaki her şey harika olurdu.
EDIT2:
try
while(~isinteger(num_dice) || (num_dice < 1))
num_dice = sscanf(input('Enter the number of dice to roll: ', 's'), '%d');
end
while(~isinteger(faces) || (faces < 1))
faces = sscanf(input('Enter the number of faces each die has: ', 's'), '%d');
end
while(~isinteger(rolls) || (rolls < 1))
rolls = sscanf(input('Enter the number of trials: ', 's'), '%d');
end
catch
disp('Invalid number!')
end
Bu çalışıyor gibi görünüyor. Bununla ilgili yanlış bir şey var mı?
isInteger = ~isempty(num_dice) ...
&& isnumeric(num_dice) ...
&& isreal(num_dice) ...
&& isfinite(num_dice) ...
&& (num_dice == fix(num_dice));
yukarıda sadece sayısal alan için doğru şekilde çalışır: Tamsayımı
Deneme bloğunuzun "yakalama" kısmı hiçbir zaman girilmeyecektir. Eğer 'while' testi başarısız olursa, döngü durur, yani."catch" u tetiklemek için bir hatayla karşılaşılmadı. –
İstisnalar giriş fonksiyonundan mümkün oldu. Üzerinde '<' veya '-' gibi bir şey girerseniz ve bir değişkene koymaya çalışırsanız, bir çökme olur. Şimdi sscanf – Tanner
kullanarak düzelttim. [ROLL] fonksiyonuna ilgi duyabilirsiniz (http://www.mathworks.com/matlabcentral/fileexchange/27327-a-dice-roller-for-matlab) Matlab için bir zar silindiri. – Jonas