Форум программистов, компьютерный форум, киберфорум
Наши страницы

Оператор scanf не считывает с клавиатуры русский символ 'а' - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Метод Шелла http://www.cyberforum.ru/cpp-beginners/thread1040980.html
Помогите пожалуйста, я пока плохо знаю метод Шелла. Разработать программу для расчета времени, необходимого для выполнения сортировки массива методом Шелла. Сортируемую последовательность...
C++ Перепишите программу из Pascal в C++ Здравствуйте. Прошу вас о помощи. Есть программа на Pascal. Нужно переписать её на C++, чтобы она выполняла такие же операции. Вот код: Program t1; var n: longint; p : int64; begin... http://www.cyberforum.ru/cpp-beginners/thread1040970.html
Постройте таблицу значений функции y=f(x) для x[a, b] с шагом h C++
#include"conio.h" #include"stdlib.h" #include"stdio.h" #include"math.h" int main() { float x,y,r,q; do {
C++ Классы, исключения и совершенные числа
Здраствуйте! Нужно описать класс Magicflower. Для создания объектов этого класса необходимо задать число лепестков цветка, которое должно быть совершенным числом, т.е. если оно равно сумме всех своих...
C++ Как преобразовать String в HWND http://www.cyberforum.ru/cpp-beginners/thread1040943.html
Можно как то преобразовать String в HWND ? как сделать обратное преобразование то есть из HWND в String разобрался, а вот из String в HWND немогу найти способ. Тип HWND нужен для хранения хендла...
C++ найти определенный интегрла функции найти определенный интегрла функции e^(x*x-2*x+5) методом симпсона с определенной точностью, которая вводится с клавиатуры (границы интеграла и число разбиений тоже вводятся с клавиатуры). И еще... подробнее

Показать сообщение отдельно
qwe321
1 / 1 / 0
Регистрация: 08.05.2013
Сообщений: 23

Оператор scanf не считывает с клавиатуры русский символ 'а' - C++

14.12.2013, 13:58. Просмотров 569. Ответов 2
Метки (Все метки)

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
29
30
31
32
33
34
35
36
37
38
#include "stdafx.h"
#include <locale>
#include <Windows.h>
#include <WinUser.h>
#include <conio.h>
 
#define MAX_STR_LEN     300
 
void cp866_cp1251(char* s) 
{    
    for (char* c = s; *c != 0; c++) 
    {        
        if (*c > -129 && *c < -80)            
        {
            *c += 64;        
        }
        else if (*c > -33 && *c < -16)            
        {
            *c += 16;    
        }
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian"); 
    
    printf("Русский текст из программы. Введите строку с клавиатуры: \n");
 
    char strFromKeyboard[MAX_STR_LEN + 1];  
    scanf("%s", strFromKeyboard);
    cp866_cp1251(strFromKeyboard);
 
    printf("Русский текст с клавиатуры: %s\n", CharLower(strFromKeyboard));
 
    getch();
    return 0;
}
Русский символ 'а' имеет код -32. Если его вводить с клавиатуры, то будет получен код -96, который с помощью функции конвертирования cp866_cp1251 преобразовался бы в -32.
Visual Studio 2008 почему-то пропускает группу символов -96, если с них начинается строка. Например:

Если ввести строку "аааааабвгд", то прочитается "бвгд"
А если ввестистроку "баааабвгд", то прочитается "баааабвгд"

Если вводить только русские символы 'а', то функция scanf будет реагировать так, как будто мы просто нажали enter
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.