Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Кодировка в консольных приложениях


Автор: EmO 27.1.2009, 00:27
Я никак не могу вывести на екран руский текст!
Например когда я просто создаю программу для вывода текста на екран, то не отображаетса рус.текст а примерно ен%?г8:
Вот код:

Код
#include <stdio.h>
#include <conio.h>
void main ()
{
    printf ("Ведите число\n");
    getch();
}


Как мне сделать чтоб отображалса рус. текст? Вся надежда на вас профисионалы! smile

Автор: HooFoo 27.1.2009, 01:39
Скачай Специальные таблицы для борланд с++

Автор: shuttle 27.1.2009, 07:00
setlocale(LC_ALL,"Russian");

потом выводи текст

Автор: mrbrooks 27.1.2009, 08:42
Цитата(EmO @  27.1.2009,  00:27 Найти цитируемый пост)
екран руский текст!

если под маздай, то заюзай CharToOem.

Цитата(EmO @  27.1.2009,  00:27 Найти цитируемый пост)
Вся надежда на вас профисионалы! 

Это комплимент?  smile 

Цитата(HooFoo @  27.1.2009,  01:39 Найти цитируемый пост)
Скачай Специальные таблицы для борланд с++ 

А что это за таблицы?

Автор: andrew_121 27.1.2009, 11:17
Цитата(HooFoo @  27.1.2009,  01:39 Найти цитируемый пост)
Скачай Специальные таблицы для борланд с++ 

А что это? smile 

Автор: WolfAlone 27.1.2009, 16:31
Мне кажется оптимальным вариантом будет сменить компилятор. Как ни странно ни в одном компиляторе под Win32 у меня таких проблем не возникало... 

Автор: EmO 27.1.2009, 18:34
Код
Скачай Специальные таблицы для борланд с++


У меня ВИзуалка, Visual Studio C++ 2008!

Код

setlocale(LC_ALL,"Russian");

потом выводи текст


Выбивает такую ошибку: error C2065: LC_ALL: необъявленный идентификатор  smile 

Код

Это комплимент?  


Можна сказать что да.  smile 




Автор: bsa 27.1.2009, 18:52
Цитата(EmO @ 27.1.2009,  18:34)
Код

setlocale(LC_ALL,"Russian");

потом выводи текст


Выбивает такую ошибку: error C2065: LC_ALL: необъявленный идентификатор  smile

ты заголовочный файл locale.h подключить не забыл?

Автор: EmO 27.1.2009, 19:06
Код

#include <stdio.h>
#include <conio.h>
#include <locale.h>
std::cout
setlocale(LC_ALL,"Russian");
void main ()
{
    printf ("Ведите число гад\n");
    getch ();
}


Вот именно что он у меня есть, но не компилитса!
Помогите пожалуйста!  smile 

Автор: andrew_121 27.1.2009, 19:09
EmO, А так не пробовал?
Код

#include <stdio.h>
#include <conio.h>
#include <locale.h>

void main () {
    setlocale(LC_ALL,"Russian");

    printf ("Ведите число гад\n");
    getch ();
}

Автор: EmO 27.1.2009, 19:15
Всем спасибо за помощ. Я во всем разобралса. Особо хочю сказать спасибо andrew_121 и bsa - ваши звания говорят за вас!  smile 

Автор: andrew_121 27.1.2009, 19:18
Я когда-то делал так:
Код

void MyPrint(const char* in) {
    char* out = new char[ strlen(in)+1 ];
    CharToOemA(in, out);
    printf( out );
    delete out;
}


Добавлено через 3 минуты и 9 секунд
Цитата(EmO @ 27.1.2009,  19:15)
Всем спасибо за помощ. Я во всем разобралса. Особо хочю сказать спасибо andrew_121 и bsa - ваши звания говорят за вас!  smile

На плюсики жми. smile 

Автор: WolfAlone 27.1.2009, 19:24
Мил человек, у меня тоже VC++ 2008, взял сделал коцанное приложение (консольное), стандартное, дополнил его Вашим кодом, вот, что получилось:

Код

#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>

using namespace System;

int main(array<System::String ^> ^args)
{
std::cout;
setlocale(LC_ALL,"Russian");
    printf ("Введи число гад\n");
    getch ();
}


ФСЁ КОМПИЛИТЬСЯ!!!  smile 

Автор: EmO 27.1.2009, 19:25
Код

На плюсики жми. 


Я вот нажымал, но требуетса 100 постов с меня! :( После 100-го поста обьязательно поставлю!

Автор: WolfAlone 27.1.2009, 19:26
Видимо поздно я ответил...  smile 

Автор: EmO 27.1.2009, 19:28
Ище один вопрос! То что я ввел: setlocale(LC_ALL,"Russian"); - ето будет относитса к всей программе или к етой функции! Например я добвлю исче одну фунцию, текст в ней будет тоже руский или стандартный?

Автор: vinter 27.1.2009, 20:17
ко всей

Автор: bsa 27.1.2009, 20:35
Цитата(WolfAlone @ 27.1.2009,  19:24)
Мил человек, у меня тоже VC++ 2008, взял сделал коцанное приложение (консольное), стандартное, дополнил его Вашим кодом, вот, что получилось:

Код

#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>

using namespace System;

int main(array<System::String ^> ^args)
{
std::cout;
setlocale(LC_ALL,"Russian");
    printf ("Введи число гад\n");
    getch ();
}


ФСЁ КОМПИЛИТЬСЯ!!!  smile

Это не может компилироваться, так как это не C++.

Автор: EmO 27.1.2009, 21:48
Я не хочю засорят форум темами, потому тут и опишу проблему! Короче программа "Пародия на калькулятор", делает все в месте. 
Вот код:
Код

#include <stdio.h>
#include <conio.h>
#include <locale.h>
int plus(int x, int y){
    x+=y;
    return x;
}
int minus(int x, int y){
    x-=y;
    return x;
}
int delenie (int x, int y){
    x/=y;
    return x;
}
int mnoj(int x, int y){
    x*=y;
    return x;
}
void main () {
    setlocale(LC_ALL,"Russian");
    int a, b, c, d, e, f;
    printf ("Ведите число для операций a\n");
    scanf("%i", &a);
    printf ("Ведите второе число для операций b\n");
    scanf("%i", &b);
    c=plus(a,b);
    d=minus(a,b);
    e=delenie(a,b);
    f=mnoj(a,b);
    printf ("%i+%i=%i\n", c);
    printf ("%i-%i=%i\n", d);
    printf ("%i/%i=%i\n", e);
    printf ("%i*%i=%i\n\Для виключений программы нажмите на клавишу Enter", f);
    getch ();
}


Я хотел сделать чтоб вывело на екран например: 

printf ("%i+%i=%i\n", c); - должно виводить (если пользователь ввел числа 12 и 2) 12+2=14, а оно мне 14+10=6
Я експерементирую и не могу достич результата, надеюсь вы мне в етом поможите.  smile  smile 

Автор: taiven 28.1.2009, 12:16
Код

#include <stdio.h>
#include <conio.h>
#include <locale.h>

int plus(int x, int y){
    x+=y;
    return x;
}
int minus(int x, int y){
    x-=y;
    return x;
}
int delenie (int x, int y){
    x/=y;
    return x;
}
int mnoj(int x, int y){
    x*=y;
    return x;
}

void main () {
    setlocale(LC_ALL,"Russian");
    int a, b, c, d, e, f;
    printf ("Ведите число для операций a\n");
    scanf("%i", &a);
    printf ("Ведите второе число для операций b\n");
    scanf("%i", &b);

    c = plus(a,b);
    d = minus(a,b);
    e = delenie(a,b);        //А что, если b будет равно нулю?
    f = mnoj(a,b);

    printf ("%i+%i=%i\n", a, b, c);
    printf ("%i-%i=%i\n", a, b, d);
    printf ("%i/%i=%i\n", a, b, e);
    printf ("%i*%i=%i\n\Для виключений программы нажмите на клавишу Enter", a, b, f);
    getch ();
}

Автор: Avaj 28.1.2009, 14:46
bsa,

Цитата

Это не может компилироваться, так как это не C++.


А почему?
Ну меня конечно смущают эти строки

Код

int main(array<System::String ^> ^args)


Код

std::cout;
, а в остальном очень похоже на С++.

Автор: vinter 28.1.2009, 14:54
Avaj, код сортировки, сятнутио с вики
Код

public static void selectionSort (int[] numbers){
      int min, temp;
 
      for (int index = 0; index < numbers.length-1; index++){
         min = index;
         for (int scan = index+1; scan < numbers.length; scan++)
            if (numbers[scan] < numbers[min])
               min = scan;
 
         // Swap the values
         temp = numbers[min];
         numbers[min] = numbers[index];
         numbers[index] = temp;
      }
   }

меня конечно смущают строки public static, но в целом похоже на С++

Автор: WolfAlone 28.1.2009, 15:04
vinter, +1  smile 

Автор: math64 28.1.2009, 16:46
Цитата(Avaj @  28.1.2009,  14:46 Найти цитируемый пост)
  ... Это не может компилироваться, так как это не C++.
А почему?Ну меня конечно смущают эти 

Это С++ для .Net и всё конечно будет компирироваться в Visual C++

Автор: Avaj 28.1.2009, 18:17
Я не знал что это и есть тот самый C++/CLI. smile

Автор: cutwater 28.1.2009, 18:58
Только к языку с++ уже не относится.

Автор: bsa 29.1.2009, 12:18
Цитата(EmO @ 27.1.2009,  21:48)
printf ("%i+%i=%i\n", c); - должно виводить (если пользователь ввел числа 12 и 2) 12+2=14, а оно мне 14+10=6
Я експерементирую и не могу достич результата, надеюсь вы мне в етом поможите.  smile  smile

Это ты считаешь что "должно". А на самом деле все будет подругому. У тебя три спецификатора в printf - это обязывает передать тебя 3 значения. Ты же передаешь только одно. Или ты считаешь, что программа сама должна догадаться, сумму каких чисел она выводит?  smile 

Автор: EvilsInterrupt 30.1.2009, 19:19
Код

    setlocale(LC_ALL,"Russian");


Для портабельности не есть гуд подход, надо бы обратить подобным или около этого:

#ifdef _WIN32
    setlocale(LC_ALL,"Russian");
#endif

Автор: vinter 30.1.2009, 19:37
EvilsInterrupt, причем тут винда?

Автор: bsa 2.2.2009, 16:38
Цитата(vinter @ 30.1.2009,  19:37)
EvilsInterrupt, причем тут винда?

В никсах и винде допустимые значения немного различаются. Например, в никсах: "ru_RU.CP1251", а в винде тоже самое: "russian_Russia.ACP"

Автор: qqweq69 8.8.2011, 14:59
Парни,а как это сделать на LCC,и как этот код должен выглядеть для C?То ,что VS -это круто понял ,но мне LCC нравится.

Автор: bsa 8.8.2011, 17:00
http://forum.vingrad.ru/index.php?show_type=forum&showtopic=269794&kw=faq-c++

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)