Форум программистов, компьютерный форум CyberForum.ru

Кодировка в консоли(C) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 08:59     Кодировка в консоли(C) #1
Здравия
Я к вам с очередной проблемойЧитал сейчас тему русские шрифты в консоли и задался вопросом. Вот вы говорите, говорите про C++, а мне в данный момент нужен CПодскажите, как вылечить кодировку?
Миниатюры
Кодировка в консоли(C)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 08:59     Кодировка в консоли(C)
Посмотрите здесь:

Кодировка в C C++
C++ Клавиши F1-F12 в консоли, и работа с мышкой в консоли
C++ Кодировка файла
Кодировка C++
Кодировка в консоли C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 09:07     Кодировка в консоли(C) #2
отправлю тебя обратно: Русские шрифты в консоли

а setlocale так вообще стандартная сишная функция
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 09:12  [ТС]     Кодировка в консоли(C) #3
Nameless One, не хочет, отображается тоже самое. А visual глаголит В ходе построения произошли ошибки
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Простейший сценарий script.c
#include <stdio.h>  // Вкючаем поддержку функции ввода/вывода
#include <time.h>   // Директива нужна для инициализации функции rand()
#include <stdlib.h> // А это - для поддержки функции rand()
#include <StdAfx.h>
#include <windows.h>
 
// Главная функция. Именно она и запускает при старте сценария.
int main(void)  {
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     // инициализируем генератор случайных чисел
     int Num; time_t t; srand(time(&t));
     // в Num записывается случайное число от 0 до 9
     Num = rand()%10;
     // далее выводим заголовки ответа
     printf("Content-type: text/html\n");
     // запрет кэширования данных браузером
     printf("Pragma: no-cache\n");
     // пустой заголовок
     printf("\n");
     // выводим текст документа - его мы увидим в браузере
     printf("<html><body>");
     printf("<h1>Здравствуйте!</h1>");
     printf("Случайное число в диапазоне 0-9: %d", Num);
     printf("</body></html>");
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 09:16     Кодировка в консоли(C) #4
Цитата Сообщение от Agmassmagist Посмотреть сообщение
А visual глаголит В ходе построения произошли ошибки
это значит, что программа вообще не скомпилировалась, и ты запустил исполняемый файл, полученный после последней удачной компиляции.
А конкретно что она говорит: какие ошибки, в каких строках?

Не по теме:

Кстати, функции time можно просто передать нулевой указатель

Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 09:20  [ТС]     Кодировка в консоли(C) #5
Nameless One, код без SetConsoleCP(1251) и SetConsoleOutputCP(1251) запускается чудесно
а вот с ними выводит вот такую белиберду

1>e:\система\сервер\cgi-bin\php\php\php.cpp(3): warning C4627: #include <time.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\система\сервер\cgi-bin\php\php\php.cpp(4): warning C4627: #include <stdlib.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\система\сервер\cgi-bin\php\php\php.cpp(13): error C2143: синтаксическая ошибка: отсутствие ";" перед "тип"
1>e:\система\сервер\cgi-bin\php\php\php.cpp(13): error C2275: time_t: недопустимое использование этого типа в качестве выражения
1> c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(486): см. объявление "time_t"
1>e:\система\сервер\cgi-bin\php\php\php.cpp(13): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "t"
1>e:\система\сервер\cgi-bin\php\php\php.cpp(13): error C2065: t: необъявленный идентификатор
1>e:\система\сервер\cgi-bin\php\php\php.cpp(13): warning C4013: time: нет определения; предполагается "extern" с возвратом типа "int"
1>e:\система\сервер\cgi-bin\php\php\php.cpp(13): error C2065: t: необъявленный идентификатор
1>e:\система\сервер\cgi-bin\php\php\php.cpp(15): error C2065: Num: необъявленный идентификатор
1>e:\система\сервер\cgi-bin\php\php\php.cpp(25): error C2065: Num: необъявленный идентификатор
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 09:23     Кодировка в консоли(C) #6
Agmassmagist, попробуй создать пустой проект (без предкомпилированного заголовка StdAfx.h).
И еще, стандарт c90 не позволяет смешивать декларации и код, т.е. декларации переменных должны располагаться вначале блока
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 09:27  [ТС]     Кодировка в консоли(C) #7
Nameless One, в смысле закомментировать этот заголовок? Все равно...

Добавлено через 1 минуту
Я его не сам добавлял, его дабавил visual, а без него ругается
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 09:29     Кодировка в консоли(C) #8
Agmassmagist, нет, нужно сделать именно то, что я сказал: создать новый проект, в свойствах проекта выбрать "пустой проект". Если там будет галочка "Добавить предкомпилированный заголовок" — убрать ее
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 09:39  [ТС]     Кодировка в консоли(C) #9
1>------ Построение начато: проект: php2, Конфигурация: Debug Win32 ------
1> stdafx.cpp
1> php2.cpp
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(13): error C2143: синтаксическая ошибка: отсутствие ";" перед "тип"
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(13): error C2275: time_t: недопустимое использование этого типа в качестве выражения
1> c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(486): см. объявление "time_t"
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(13): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "t"
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(13): error C2065: t: необъявленный идентификатор
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(13): error C2065: t: необъявленный идентификатор
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(13): warning C4133: функция: несовместимые типы - из "int *" в "time_t *"
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(13): warning C4244: функция: преобразование "time_t" в "unsigned int", возможна потеря данных
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(15): error C2065: Num: необъявленный идентификатор
1>e:\система\сервер\cgi-bin\php2\php2\php2.cpp(25): error C2065: Num: необъявленный идентификатор
1> Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Добавлено через 2 минуты
чего-то он теперь на все начал ругаться: и на начальный код и на измененный....

Добавлено через 3 минуты
А, нет. Только на новый код ругается
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 09:43     Кодировка в консоли(C) #10
Agmassmagist, у тебя там синтаксические ошибки, про функции SetConsole* там ничего не сказано.

Цитата Сообщение от Nameless One Посмотреть сообщение
И еще, стандарт c90 не позволяет смешивать декларации и код, т.е. декларации переменных должны располагаться вначале блока
это исправил?
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 09:44  [ТС]     Кодировка в консоли(C) #11
Nameless One, создание переменных в самое начало? Да, вот
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>  // Вкючаем поддержку функции ввода/вывода
#include <time.h>   // Директива нужна для инициализации функции rand()
#include <stdlib.h> // А это - для поддержки функции rand()
#include <windows.h>
#include <stdafx.h>
 
 
int main(void)
{
     // инициализируем генератор случайных чисел
     int Num; time_t t; srand(time(&t));
     // в Num записывается случайное число от 0 до 9
     Num = rand()%10;
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     // далее выводим заголовки ответа
     printf("Content-type: text/html\n");
     // запрет кэширования данных браузером
     printf("Pragma: no-cache\n");
     // пустой заголовок
     printf("\n");
     // выводим текст документа - его мы увидим в браузере
     printf("<html><body>");
     printf("<h1>Здравствуйте!</h1>");
     printf("Случайное число в диапазоне 0-9: %d", Num);
     printf("</body></html>");
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 09:48     Кодировка в консоли(C) #12
Убери "#include <stdafx.h>"
C
1
int Num; time_t t; srand(time(&t));
можно заменить на
C
1
2
int Num;
srand(time(NULL));
И да, не вижу, чтобы у тебя главная функция возвращала значение. Или ты пишешь на с99?
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 09:51  [ТС]     Кодировка в консоли(C) #13
Nameless One, как ни странно, но программа перестала материться на отсутствие #include <stdafx.h>, да она теперь вообще это делать перестала, код скомпилировался, но в выводе есть такая штука

"php2.exe": Загружено: "E:\Система\Сервер\cgi-bin\php2\Debug\php2.exe", Символы загружены.
"php2.exe": Загружено: "C:\Windows\System32\ntdll.dll", Невозможно найти или открыть файл PDB
"php2.exe": Загружено: "C:\Windows\System32\kernel32.dll", Невозможно найти или открыть файл PDB
"php2.exe": Загружено: "C:\Windows\System32\KernelBase.dll", Невозможно найти или открыть файл PDB
"php2.exe": Загружено: "C:\Windows\System32\msvcr100d.dll", Символы загружены.
Программа "[612] php2.exe: Машинный код" завершилась с кодом 0 (0x0).

и символы все все равно - абракадабра
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 09:53     Кодировка в консоли(C) #14
Цитата Сообщение от Agmassmagist Посмотреть сообщение
и символы все все равно - абракадабра
вот, уже лучше. А теперь сделай вот это:
// установить вручную шрифт Lucida Console в свойствах окна консоли
// и запомнить это для всех окон с этим именем
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 10:05  [ТС]     Кодировка в консоли(C) #15
Цитата Сообщение от Nameless One Посмотреть сообщение
И да, не вижу, чтобы у тебя главная функция возвращала значение. Или ты пишешь на с99?
я в C полный нуль, просто хочу научится обращаться к серверу (это отдельная тема и "как делать" - я знаю), но не могу из-за кодировки, а все что находится до printf меня мало интересует (устати, убрал
C
1
2
3
4
int Num;
    srand(time(NULL));
     // в Num записывается случайное число от 0 до 9
     Num = rand()%10;
и код не ругается даже на SetConsoleCP(1251), но кодировка не отображается все равно)
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 10:06     Кодировка в консоли(C) #16
Посмотри мое предыдущее сообщение
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 10:07  [ТС]     Кодировка в консоли(C) #17
Заработало!!!!

Добавлено через 49 секунд
Никогда бы не подумал, что и-за шрифта будет неправильно отображаться...
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 10:08     Кодировка в консоли(C) #18
Agmassmagist, а теперь самое интересное. Вместо всех этих телодвижений можно просто написать
C
1
setlocale(LC_ALL, "Russian");
и все будет работать (вывод кириллицы), но если попытаешься вводить из консоли текст на кириллице, то таки будут кракозябры
Agmassmagist
31 / 31 / 2
Регистрация: 20.12.2011
Сообщений: 202
22.12.2011, 10:12  [ТС]     Кодировка в консоли(C) #19
мне на консоли и не нужно)) а windows.h все равно обязателен?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2011, 10:14     Кодировка в консоли(C)
Еще ссылки по теме:

C++ считывание с консоли ( не с клавы, а именно с консоли)
C++ Кодировка в консоли (на ЕГЭ)
C++ Кодировка ввода вывода консоли под кириллицу и латиницу

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.12.2011, 10:14     Кодировка в консоли(C) #20
функция setlocale определена в заголовочном файле locale.h (который, скорее всего будет неявно подключен через другие заголовочные файлы). От windows.h можешь избавиться
Yandex
Объявления
22.12.2011, 10:14     Кодировка в консоли(C)
Ответ Создать тему
Опции темы

Текущее время: 19:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru