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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Synapsehome
0 / 0 / 0
Регистрация: 27.05.2011
Сообщений: 5
#1

Абракадабровый C++ - C++

27.05.2011, 16:39. Просмотров 423. Ответов 6
Метки нет (Все метки)

Вся проблема в чём - при вводе на русском я пишу какой-то абракадброй вроде иероглифов. Следствие установило, что эта хрень начинается после цикла do. Вот сам код, чистый консольный проект вин32:
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
28
#include <iostream>
#include <conio.h>
using namespace std;
enum itsaWord { NO, YES };
int main()
{
  setlocale(0,"");
  itsaWord isWord=NO;
  char ch='a';
  int wordcount=0;
  cout << "Введите предложение: \n";
  do {
 ch = getche();
 if( ch==' ' || ch=='\r' )
 {
   if( isWord==YES )
   {
     wordcount++;
     isWord=NO;
   }
 }
 else
 if( isWord==NO )
    isWord=YES;
    } while( ch !='\r ' );
  cout << "\n---Число слов: " << wordcount << "---\n";
  return 0;
}
Ваши предположения?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
27.05.2011, 16:46 #2
Цитата Сообщение от Synapsehome Посмотреть сообщение
setlocale(0,"");
setlocale ( LC_ALL, "Russian" );
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
27.05.2011, 16:49 #3
C++
1
2
3
SetConsoleCP(1251);//временно меняем кодировку ввода
ch = getche();
SetConsoleCP(866);//меняем кодировку ввода назад
попробуй так )
и еще #include <windows.h> для SetConsoleCP
skitafter
Сообщений: n/a
27.05.2011, 18:23 #4
Аналогичная проблема. Использую visual studio 2008. И необязательно это возникает после использования цикла do, а вообще всегда когда использую getche(). Ввод с cin нормальный, а с getche() абракадабра. Пробовал setlocale(0,""); , setlocale ( LC_ALL, "Russian" ); , setlocale ( LC_ALL, "" ) , переустанавливал windows и несколько раз студию, пробовал другие IDE , проблема не решалась. Причём раньше такой проблемы не было, возникла внезапно. Спасибо m1Rr0r , помог его способ.
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,379
Завершенные тесты: 1
27.05.2011, 19:31 #5
Цитата Сообщение от skitafter Посмотреть сообщение
а с getche() абракадабра
кстати, о getche():
Syntax

#include <conio.h>
int getche(void);

Description

Gets character from the keyboard, echoes to screen.
getche reads a single character from the keyboard and echoes it to the current text window using direct video or BIOS.

Note: Do not use this function for Win32s or Win32 GUI applications.

Return Value

getche returns the character read from the keyboard.
-Svarog-
5 / 5 / 0
Регистрация: 27.11.2014
Сообщений: 13
27.11.2014, 16:25 #6
гугл перевод #include <conio.h>
INT getche (недействительными???);
описание
Получает символ с клавиатуры, перекликается с экрана.
getche читает один символ с клавиатуры и эхо его к текущему текстовом окне с использованием прямого видео или BIOS.

Примечание: Не используйте эту функцию для Win32s или Win32 GUI приложений.
Возвращаемое значение
getche возвращает символ с клавиатуры.
SeeT
53 / 23 / 2
Регистрация: 12.10.2012
Сообщений: 132
Записей в блоге: 1
27.11.2014, 16:38 #7
Мне всегда помогает сменить кодировку файла с UTF-8 на ANSI через блокнот) Попробуй, мб поможет
Yandex
Объявления
27.11.2014, 16:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru