Я работаю над проектом для университета, используя c.
Нам дали основу для проекта (базовая реализация графического интерфейса с использованием BGI).
По какой-то причине весь текст в окнах дисплея выводится иероглифами Юго-Восточной Азии.

Вот код, который я сейчас использую для этого (ну, по крайней мере, то, что кажется актуальным),
#include <graphics.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
void startScreen() {
settextstyle(EUROPEAN_FONT, 0, 16);
outtextxy((getmaxx() / 2) - (textwidth("TOWER OF POWER") / 2), 0, "TOWER OF POWER");
outtextxy((getmaxx() / 2) - (textwidth("PRESS ANY KEY")/2), getmaxy() - textheight("PRESS ANY KEY"), "PRESS ANY KEY");
tower();
readkey();
clearviewport();
}
void main(void) {
// Initialise graphic window (x = 639 , y = 479)
int gd = DETECT, gm = 0;
initgraph(&gd, &gm, "");
startScreen();
}
Заранее спасибо за помощь.
Добро пожаловать в StackOverflow! Не могли бы вы уточнить: а) какой компилятор и его версия?, б) BGI графический интерфейс Borland - это правильно? в) какая ОС и версия? @DavidHoelzer Я тоже не могу поверить - я использовал BGI, будучи студентом, и это было .. 26 лет назад! Вау!
заголовочный файл: conio.h строго для ОС Windows. т.е. это не портативно. Предложите использовать стандартные функции библиотеки C для ввода-вывода с пользователем и не использовать conio.h
вот почему вы получаете неожиданный шрифт: settextstyle(EUROPEAN_FONT, 0, 16);
размещенный код включает stdlib.h дважды, почему?
включать файлы заголовков, содержимое которых не используется, является плохой практикой программирования. Предложите удалить утверждение: #include <math.h>
относительно: void main(void) { В современном C есть только две действительные подписи для main() Обе они имеют возвращаемый тип int, а не void
@AlexYu A) Visual Studio 2017 15.9.5 (но у других, использующих версию 2015 года, та же проблема) B) Да, я даже не собираюсь вдаваться в то, насколько разочаровывает этот класс (серьезно, у меня был урок программирования в прошлом семестре и 2 в этом семестре и они еще изучают основы (как делать математику)) в) windows 10 pro 1809
@user3629249 отвечает в порядке комментариев 1) Он не должен быть переносимым, и, если я правильно помню, я использовал некоторые его функции. 2) Я не заметил stblib.h, спасибо, исправлю, но основная проблема существовала до того, как я добавил вторую. 3) Как я уже сказал, я включил только соответствующий код, math.h используется в коде. 4) Эту часть программы мне дал лектор.
@user3629249 user3629249 извините, не увидел settextstyle(EUROPEAN_FONT, 0, 16); не уверен, что вы имеете в виду, я пробовал использовать разные шрифты, но все еще получаю нелатинские символы
@AlexYu Я считаю, что выяснил возможную причину проблемы, я думаю, что она использует шестнадцатеричные значения ascii и пытается поместить их в Unicode. я нашел это, проверив шестнадцатеричный ascii для двух букв, объединив их и поместив результат в средство проверки Unicode. это не точный символ, но кажется, что при этом все символы помещаются в разделы CJK юникода.





Yikes Почему я продолжаю читать об университетах, использующих компиляторы C более чем 20-летней давности.