Чтение чисел с плавающей точкой - PullRequest
0 голосов
/ 27 февраля 2012

Я пытаюсь прочитать числа с плавающей запятой (ввод из командной строки). Это правильный путь?

sscanf(argv[i], "%f", &float)

1 Ответ

2 голосов
/ 27 февраля 2012

Использование sscanf() с элементом argv - это один из способов извлечь float из командной строки аргумент . Вам также следует проверить возвращаемое значение, чтобы увидеть, действительно ли float было извлечено из строки и сохранено в вашей переменной.

Возможно, лучше использовать strtod(), так как вы можете выполнить лучшую проверку с помощью второго аргумента. Вы можете использовать этот указатель, чтобы проверить, что последний символ, использованный в преобразовании, был последним символом в строке. то есть. Вы можете проверить, что "3.5abc" содержит допустимое число с плавающей точкой, но вся строка не была единственным допустимым числом с плавающей точкой.

Если то, что вы подразумеваете под вводом командной строки , читает входные данные из stdin, то это не имеет ничего общего с argv, и вместо этого вам следует использовать scanf() или fgets() + strtod().

Обратите внимание, что есть также функция atof, которая по сути является версией strtod, которая не дает вам дополнительной возможности проверки ошибок. Из справочных страниц это просто: strtod(nptr, (char **) NULL);. C99 также предоставляет функцию strtof(), которая возвращает float вместо double. Вы можете назначить double для float и преобразовать его неявно, поэтому не думайте, что использование strtod() вызовет проблему.

...