Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 11:39   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Некорректно отображается кириллица в консольном пр

Есть код
Код:
// Рис. 2.7: fig02_07.cpp
// Программа вычисления среднего значения. Использует повторение, управляемое счетчиком.
#include<iostream.h>
#include<windows.h>

int rustext(char str[])
{
 CharToOem(str,str);
 cout << str;
}

using std::cout;
using std::cin;
using std::endl;

int main()
{
 int total, // сумма оценок
     gradeCounter, // число введенных оценок
     grade, // одна оценка
     average; // средняя оценка

 // инициализация
 total = 0; // установка суммы в исходное состояние
 gradeCounter = 1; // подготовка к циклу

 // вычисление
 while (gradeCounter <= 10) // цикл (10 итераций)
 {
  rustext("Введите оценку: "); // подсказка на ввод
  cin >> grade; // ввод значения grade
  total = total + grade; // добавление grade к total
  gradeCounter = gradeCounter + 1; // увеличение счетчика
 }

 // завершение
 average = total / 10; // целочисленное деление
 rustext("Средняя оценка равна ");
 cout << average << endl;

 system("pause");
 return 0; // указание на успешное завершение
}
Проблема в том, что первый раз строка "Введите оценку: " выводится нормально, а остальные 9 раз крякозябрами. Для ясности привожу скрин:
fs444 вне форума Ответить с цитированием
Старый 24.12.2009, 14:13   #2
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Код:
setlocale(LC_ALL,"russian");
Cpluser вне форума Ответить с цитированием
Старый 24.12.2009, 14:20   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Проблема в том, что вы по десять раз одну и ту же строку перекодируете.
Более того, константу.
Код:
bool rustext(const char* str)
{
    char temp[256];
    CharToOem(str, temp);
    cout << temp;
    return cout.good();
}

Последний раз редактировалось netrino; 24.12.2009 в 14:22.
netrino вне форума Ответить с цитированием
Старый 24.12.2009, 14:25   #4
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Решил проблему увеличением буфера в ф-ции rustext():
Код:
int rustext(char str[])
{
 char buffer[1024];
 CharToOem(str,buffer);
 cout << buffer;
}
fs444 вне форума Ответить с цитированием
Старый 24.12.2009, 23:57   #5
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Ммм... а что такого в этой строке, если она занимает килобайт? Там целый абзац что-ли?
Darth.Vader вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сайт не отображается в IE и Opera. Отображается только в FireFox. Roman_K HTML и CSS 3 03.02.2011 22:32
Кириллица и BDE mixer94 БД в Delphi 0 23.12.2009 12:59
Некорректно работает запрос Arkuz БД в Delphi 9 20.08.2009 07:04
Некорректно работает запрос zulu80 БД в Delphi 10 16.02.2009 13:35
IdHTTP1 некорректно работает nike-p Работа с сетью в Delphi 9 23.07.2008 23:13