setlocale
с выводом понятно setlocale(LC_ALL, "Russian");
ну и с вводам вроде тоже setlocale(LC_ALL, ".OCP");
но блин в первом случае проблема с считыванием, во втором с выводом! :mad:
почитал энное количество страниц, и как я понял это всё есчо актуальная проблема, и спобос решения тот что мозг понял единственный через CharToOem
char str2[120];
gets(str1);
CharToOem((LPCWSTR)str1, str2);
printf("%s", str);
и тут пару вопросов насчёт этой функции:
*для чего тут str2 если преобразования над str1 происходят, она может быть в роли посредника/временного хранилища?
*и второй вопрос - в какой кодировке затем символы будут сохранены в файло? в 886? и если да, то как быть если нужно в ANSI.. или какой там по умолчанию для текстовых файлов для русско-локализованных версий системы)
И вообще если есть какие то альтернативные способы решения, пожалуйста поделитесь.
P.S.MVC++ 2010–это что?! О_О
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
проблема с ними одна - не работает в XP
Ты может объяснишь? Эксперт!
@pixo $oft
Вот и интересно мне как сохранять в нужной кодировке??
MVC++ 2010 это Microsoft Visual C++ 2010, что так сложно догадаться) просто как информация о том в чём я пишу.. Артанис!)
Alm3n
Де пробовал, на выводе бред.
Юзайте, например, fgets взамен.
TauRN7, вы на чистом Си пишете?
Нас, студентату, первых курсов заставляют придерживаться Си, но на деле получается каша из Си и Си++ ну понимаете, время неопределённости и некоторого недопонимания элементарного.
И ради интереса, чем так неугодна gets? и причем тут fgets - если с консоли считывается строка?
Ramon
Если не сложно пояснить запись, то будьте любезны, с первого взгляда не вижу связи с юникодом. И мне казалось wchar_t используюется только для восточных языков(как нам диктовали на лекциях), но ни как не думал что и для кириллицы. Прост примерчик как бы с введённой строкой работать? Темже gets'ом?
wchar_t x[100500];
gets(x);
и что дальше? =/
В функции fgets можно задавать максимальное количество вводимых символов.
Ознакомьтесь: http://ru.wikipedia.org/wiki/Gets
Правд офтоп немног пошёл.. дабы во избежания закрытия темы за флуд:
Может всё же есть что по теме?
{
char mess[10]={0};
FILE* f;
FILE* f2;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
f=fopen("out.txt","w+b");
f2=fopen("in.txt","r");
scanf("%s",mess);
fputs(mess,f);
printf("%s\n",mess);
fgets(mess,sizeof(mess),f2);
printf("%s",mess);
fclose(f);
fclose(f2);
return 0;
}
all works exelent
char mess[10]={0};
...
scanf("%s",mess);
...
all works exelent
*Берёт топор, сооружает эшафот.
- Любезный, снимайте штаны, садитесь на плаху. Будем рубить руки.
Аналогичная претензия: переполнение буфера.
Избежать можно так:
scanf("%9s",mess); // один символ на терминальный ноль
Аналогичная претензия: переполнение буфера.
Ну вы нашли к чему придраться. :)
[ATTACH=CONFIG]5078[/ATTACH]
[ATTACH=CONFIG]5078[/ATTACH]
ну а чтение из файла та всёравно коряво
вовсе нет
[ATTACH=CONFIG]5080[/ATTACH]
#include <locale.h>
int main()
{
setlocale(LC_ALL, "");
if (FILE* fd = fopen("test.txt", "w+"))
{
char tst[] = "Тест";
fprintf(fd, "%s", tst);
rewind(fd);
fscanf(fd, "%4s", tst);
printf("%s", tst);
fclose(fd);
}
return 0;
}
Прекращайте писать не по стандарту.
PS: Мне также жаль пользователей которые будут использовать поделки бывших студентов у которых был такой препод.
И я не могу не заметить что шрифт вашей консольки несколько отличен от моей.
Ramon
Всё это печально. Курсач стоит только из-за этой проблемы, напомню:
-ввод информации
-сохранение её
-вывод её же из файла
какой бы способ не предлагали - в одном случае корявая запись, в другом отображение, в третьем чтение...
Прекращайте писать не по стандарту.
о каком стандарте идет речь? этот код одинаково плохо будет работать и на cl, и на gcc. и не нужно говорить плохое о преподователе, он весьма профессионален. кажется очевидным, что тред совсем не о правильном открытии файла и мой код был сделан на скорую руку без всяких проверок.
[QUOTE=TauRN7;]
И я не могу не заметить что шрифт вашей консольки несколько отличен от моей.
[/QUOTE]
Lucide Console
сам не пробовал, но выглядит правдоподобно. еще есть вариант с ключиками реестра, но не знаю, есть ли в win 7 ключик, отвечающий за шрифт в консоли
PS: Пишете Ц приложение пишите с использованием Ц библиотеки. А если у препода юникод используется только азиатами то все ясно с этим преподом.
[ATTACH]5095[/ATTACH]