Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 1 / 1
Регистрация: 19.09.2019
Сообщений: 15

Вывод двумерного массива wprintf_s

22.10.2019, 21:52. Показов 1396. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть карта. у неё сверху и снизу бортики, так что их выводить не нужно(они не меняются).
Решил проверить сколько выполняются функции. Если выводить с помощью wcout, то получается ~ 170, если wprintf_s, то ~ 105.
Использую wprintf_s, потому что подключён Unicode.

Проблема в том, что у меня выводится ещё куча мусора, если использовать wprintf_s. Связано ли это с тем, что printf выводит, пока не встретит '\0'? И как это можно исправить?


C++
1
2
3
for (int i = 2; i < width - 2; i++) {
        wprintf_s(L"%s\n", map[i]);
    }
Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2019, 21:52
Ответы с готовыми решениями:

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива.
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала вывести ее,а потом провести транспонирование.

Вывод двумерного массива
int myArr = { 0 }; // инициализация двумерного размером 5x5 нулями cout &lt;&lt; myArr &lt;&lt; endl; //попытка вывести значение которое находится в...

Вывод двумерного массива
Почему идет неправильный вывод? #include &lt;iostream&gt; using namespace std; int main() { setlocale (LC_ALL,...

2
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,898
23.10.2019, 12:04
Лучший ответ Сообщение было отмечено Cicle как решение

Решение

Цитата Сообщение от Cicle Посмотреть сообщение
использовать wprintf_s...
...хуже чем использовать goto.
Цитата Сообщение от Cicle Посмотреть сообщение
У меня есть карта.
Что вы имеете в виду под картой?
Наиболее вероятное, что подходит под остальные ваши шаманские действия - вы пытаетесь написать консольную игру с перемещением по игровому полю, хранящемуся в двумерном массиве символов.
Если это так, непонятно зачем использовать даже человеческий wprintf (про не-человеческий wprintf_s даже не говорю: случаев уместности его применения мне неизвестно), когда есть удобная кроссплатформенная библиотека ncurses.
Цитата Сообщение от Cicle Посмотреть сообщение
Связано ли это с тем, что printf выводит, пока не встретит '\0'?
*printf выводит в соответствии с форматом. Это может быть число, символ, строка и т.п. Что пытаетесь вывести вы - неизвестно. Вот если бы привели кусок исходного кода, можно было бы говорить.
Естественно, тех трех строчек, что вы привели, недостаточно.
Попробую пофантазировать еще: ваше игровое поле считается не двумерным массивом, а массивом строк. Не заканчивающихся нулем? Разной длины?!
Вариант первый, если это действительно строки символов известного размера и без завершающего нуля: ограничить поле вывода printf("%.10s\n", str);
Вариант второй: выводить по одному символу в цикле:
C
1
2
3
4
5
for(j=0; j<height; j++){
  for(i=0; i<width; i++)
    printf("%c", field[i][j]);
  printf("\n");
}
Вариант третий, извращенский: fwrite(str, 1, 10, stdout);
1
2 / 1 / 1
Регистрация: 19.09.2019
Сообщений: 15
23.10.2019, 21:50  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Что вы имеете в виду под картой?
У меня двумерный массив

C++
1
2
3
4
5
wchar_t** map;
map = new wchar_t*[width];
    for (int i = 0; i < width ; i++) {
        map[i] = new wchar_t[length];
    }
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вариант первый, если это действительно строки символов известного размера и без завершающего нуля: ограничить поле вывода printf("%.10s\n", str);
Только что попробовал. Так всё работает. Только вот у меня карта создаётся с помощью конструктора куда передается размер. Возможно, если не найду другого решения, то будет карта определенного размера тогда.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вариант второй: выводить по одному символу в цикле:
Так я тоже пробовал. Разница между wcout и wprintf практически нет, если использовать в цикле по одному символу.

C++
1
2
3
4
5
map.DrawMap();
map.DrawBullets(bullets);
map.MoveBullets(bullets);
map.bullet_out_of_range(bullets);
map.checkbullets(bullets, enemies);
У меня производятся действия и проверки над картой. Только вот почти 100% времени работы занимает вывод. Именно поэтому я и подумал его оптимизировать. У меня реал-тайм аркада, поэтому задержки между выводами нежелательны.

Добавлено через 18 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
строки символов известного размера и без завершающего нуля:
Спасибо за идею.

Расширил длину карты на 1:
C++
1
2
3
4
map = new wchar_t*[width];
    for (int i = 0; i < width; i++) {
        map[i] = new wchar_t[length + 1];
    }
И заполнил последний ряд '\0'

C++
1
2
3
4
5
for (int i = 0; i < width; i++) {
        for (int j = length; j < length + 1; j++) {
            map[i][j] = L'\0';
        }
    }
Вроде всё работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2019, 21:50
Помогаю со студенческими работами здесь

Вывод двумерного массива
Ребят, подскажите, как исправить, пожалуйста! Массив 7x7 нужно, чтобы так и выводился: семь строк, семь столбцов, а почему-то в строчку...

Вывод двумерного массива
Здравствуйте. Подскажите пожалуйста почему следующий код - функция для вывода элемента массива - не работает. #include&lt;iostream&gt;...

Вывод двумерного массива
Решил попрактиковаться в работе с вложенными циклами, напоролся на проблему, которую понятия не имею как решить. Вот код: #include...

Вывод двумерного массива
Есть у меня код: const int x = 5; int i, j, map, map_add, bot = 8, o; bot = map; for (i = 0; i &lt; x; i++) { for (j = 0; j...

Вывод двумерного массива
Нужно сделать вывод как на картинке. я пробовал но у меня возникли некоторые сложности for(int i = 0; i&lt;26; ++i) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru