Я следую за учебниками для начинающих для OpenGL в C++, но по мере того, как я начинал программировать на C#, это заставило меня взять много вещей как само собой разумеющееся. Таким образом, моя проблема возникла, когда я отлаживал печать своего показания FPS на выходе. Я думаю, что метод был чем-то вроде DebugPrintString с верхней части головы, который взял char *, и в основном я печатал «FPS: x». Я использовал scanf_s, чтобы поместить значение fps в массив символов, но это - то, где моя проблема. Насколько велик массив символов?Подсчет цифр в поплавке
Позвольте мне подробнее рассказать следующее: чтение FPS хранится как поплавок, поскольку кадры/секунды обычно заканчиваются не хорошим числом. Таким образом, моего номера может быть 60, или это может быть 59.12345. 60 потребуется всего 2 байта, а 59.12345 - 8 (1 за период). Поэтому я подумал: «О, хорошо, мне нужно подсчитать количество цифр, никаких проблем!» Мальчик был я в шоке.
Я сделал способ подсчета цифр, считая левую сторону десятичной точки, было легко, просто прежде всего, чтобы сделать его как int, чтобы удалить десятичные точки и делить на 10 (на самом деле, я думаю, биты) и подсчитать количество раз, когда я могу сделать это, пока не достигнет 0. И теперь, чтобы подсчитать цифры с правой стороны, ну, я просто умножусь на 10, вычтем цифру и сделаю это, пока не достигнет нуля , Метод, как правило, возвращает 32, я думаю, что это так. Итак, я WTF'd и посмотрел на него в отладке, получается, когда вы умножаете float, эффективно перемещая столбцы цифр из-за известной проблемы точности, она просто добавила другую цифру!
Я сделал несколько крупных поисковых запросов, но не смог найти ничего выше char str [128] и scanf, если в этом случае strlen (str) минус 1 (нулевой терминатор). Но я надеялся на более элегантное решение. В конце концов, я просто запустил его как int и допустил достаточно для 9999 кадров в секунду, также добавил чек, чтобы узнать, есть ли fps> 9999, но я не думаю, что это когда-нибудь произойдет. Лучше перестраховаться, чем SEG FAULT :(
TLDR: Есть ли способ, чтобы получить количество цифр в обращении Как зсапЕ это сделать ?!
Извините за длинный пост, просто хотел поделиться своей фрустрацией>? : D
Edit:.. орфографические ошибки
sprintf? Это предложение является наполнителем. – recursive
Простите, что вы имеете в виду? Это было слишком долго? да ха-ха извините: P – daniel
«Рекурсивный» необходимо записать не менее 15 символов в своем комментарии. "Sprintf?" всего восемь. – John