Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поясните сложение sprintf с int'ом (С, без ++) 
:(
    Опции темы
wilson
Дата 9.10.2017, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 11.6.2008

Репутация: нет
Всего: нет



Что-то не пойму, как можно складывать int с char и получать строку:

Код

void ShowBoard()
{
    char str[1000];
    int i,j,lenstr=0;

    for(i=0; i<ROWS; i++)
    {
        for(j=0; j<COLS; j++)
        {
            lenstr+=sprintf(str+lenstr,"%2c",board[i][j]);//непонятна эта строка и следующая
        }
        lenstr+=sprintf(str+lenstr,"\n");
    }

    MessageBox (0, str, "Крестики-нолики", MB_OK);
}


Остальной код не стал приводить - задаётся двумерный массив board[ROWS][COLS] и выводится в окне с кнопкой ОК. Не могу понять формирование строки str.

Спасибо.

Это сообщение отредактировал(а) wilson - 9.10.2017, 14:59
PM MAIL   Вверх
tzirechnoy
Дата 9.10.2017, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: -1
Всего: 16



Не с char, а с char[1000]. Оператор + на массивах и указателях практически эквивалентен получению указателя на соответствующий элемент. Порядок операндов в операторе + традицыонно не очень важэн.
PM MAIL   Вверх
wilson
Дата 10.10.2017, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 11.6.2008

Репутация: нет
Всего: нет



С указателями немного понятнее. Но как понять lenstr+sprintf ? Функция вывода на экран возвращает какое-то служебное значение в качестве отчёта об отсутствии ошибок, но каким образом происходит накопление элементов массива через это сложение?
PM MAIL   Вверх
xvr
Дата 10.10.2017, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Во первых - sprintf  это не 'функция вывода на экран'
Во вторых - sprintf возвращает количество символов, которое она записала в выходную строку
Так что lenstr+=sprintf просто смещает индекс в строке (заметьте, что в сам sprintf подается не str а str+lenstr) на количество символов в строке. Таким образом следующий sprintf добавит то, что он выводит, в конец строки


Это сообщение отредактировал(а) xvr - 10.10.2017, 13:41
PM MAIL   Вверх
wilson
Дата 10.10.2017, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 11.6.2008

Репутация: нет
Всего: нет



Цитата(xvr @ 10.10.2017,  13:39)
Так что lenstr+=sprintf просто смещает индекс в строке ..

Спасибо, теперь проясняется.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1264 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.