java.awt.Robot класс может быть использован для аутентификации
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
login() throws Exception {
// Pass username
autoType(username);
// to move to Password field
autoTab();
// Enter Password
autoType(password);
// To click on login
autoSubmit();
}
private static void autoType(String string) throws AWTException {
Robot robot = new Robot();
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection stringSelection = new StringSelection(string);
clipboard.setContents(stringSelection, null);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
}
private static void autoTab() throws AWTException {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
}
private static void autoSubmit() throws AWTException {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
В Visual C++ существует нестандартное _isnan(double)
функция, которую можно импортировать через float.h
.
В C существует a isnan(double)
функция, которую можно импортировать через math.h
.
В C++ существует isnan (дважды) функционируют, который можно импортировать через cmath
.
Как другие указали, использование NaN может быть большим количеством стычки. Они - особый случай, с которым нужно иметь дело с подобными Нулевыми указателями. Различие - то, что NaN не будет обычно вызывать дампы ядра и отказы приложения, но их чрезвычайно трудно разыскать. Если Вы решаете использовать NaN, используйте их как можно меньше. Злоупотребление NaN является наступательной практикой кодирования.
Мы сделали это при помощи NaN:
double d = std::numeric_limits<double>::signaling_NaN();
bool isNaN = (d != d);
Значения NaN, сравненные для равенства с собой, приведут ко лжи. Это - способ, которым Вы тестируете на NaN, но который, кажется, только допустим если std::numeric_limits<double>::is_iec559
верно (если так, это соответствует ieee754 также).
В C99 существует названный макрос isnan
для этого в math.h
, который проверяет число с плавающей точкой на значение NaN также.
Одна опция была бы оберткой, которая имеет рекламу плавающую булевская переменная, но это не может работать, поскольку мои библиотеки имеют контейнеры, которые хранилище удваивает и не объекты, которые ведут себя, как удваивается.
Это - позор. В C++ это тривиально для создания шаблонного класса, который автопреобразовывает в фактический двойной (ссылочный) атрибут. (Или ссылка на любой другой тип в этом отношении.) Вы просто используете оператор броска в шаблонном классе. Например: оператор TYPE & () {возвращаемое значение;} можно затем использовать HasValue <дважды> где угодно, Вы обычно использовали бы двойное.
Другой использовал бы NaN (станд.:: numeric_limits). Но я не вижу способа проверить на переменную быть NaN.
Как litb и James Schek также отметил, C99 предоставляет нам isnan ().
Но будьте осторожны с этим! Значения NaN делают математику и логику реальными интересный! Вы думали бы, что число не могло быть оба НЕ> =foo и НЕ <=foo. Но с NaN, это может.
Существует причина, которую я сохраняю WARN-IF-NAN (X) макрос на моей панели инструментов. У меня были некоторые интересные проблемы, возникают в прошлом.
Это не встроенный тип, но я обычно использую boost::optional
для такого рода вещи. Если бы Вы абсолютно не можете использовать это, возможно, указатель добился бы цели - если указатель является НУЛЕВЫМ, то Вы знаете, что результат не содержит допустимое значение.