У меня есть функция с параметрами по умолчанию, которая отображает текст для экрана. Что-то вроде этого:
DrawScreenString(int, int, string, int uicolor, font);
Однако я пытаюсь передать строчную переменную "livesRemaining" следующим образом:
DrawScreenString(10, 5, "Lives : %d ",livesRemaining, 0xF14040, NULL);
livesRemaining = 3
Поэтому из-за того, что функция принимает только 5 аргументов, она не скомпилируется, потому что функция думает, что я пытаюсь передать 6-й аргумент, не зная, что я пытаюсь добавить строку к уже существующей строке "Lives" :"
Вот что я хочу, чтобы результат выглядел так:
Live : 3
Я знаю, что это неправильный способ сделать это, как я это делаю? Огромное спасибо !!
Если вы используете компилятор с поддержкой С++ 11 в нем, вы можете использовать метод to_string, о котором упоминал Крис (http://www.cplusplus.com/reference/string/to_string/?kw=to_string)
DrawScreenString(1,5, "Lives Remaining: " + std::to_string(livesRemaining), 0xF00000, NULL).
Однако, если ваш компилятор не имеет функции to_string, вы можете использовать строковый поток для создания (http://www.cplusplus.com/reference/sstream/stringstream/stringstream/) или sprintf в буфер символов, а затем построить string из буфера символов. Мне лично не нравится опция sprintf из-за фиксированного буфера и проблемы с переполнением буфера, если вход не проверен, но это опция.
Изменение: пример с добавлением строкового потока для каждого запроса OP:
#include <sstream>
...
std::stringstream ss;
int livesRemaining = 5;
ss << "Lives remaining: " << livesRemaining;
DrawScreenString(1,5, ss.str(), 0xF00000, NULL);
sprintf
могут немного исчезнуть при использовании snprintf
.
Вы можете добавить строку "Lives:" в переменную livesRemaining следующим образом:
"Lives : %d :"+Integer.toString(uicolor)
ИЛИ
"Lives : %d :"+uicolor + ""
ИЛИ
"Lives : %d :"+String.valueOf(uicolor)
Наконец, выглядя так:
DrawScreenString(10, 5,"Lives : %d :"+Integer.toString(uicolor), 0xF14040, NULL);
livesRemaining = 3
std::to_string
.