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

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

Восстановить пароль Регистрация
 
qwe321
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 23
14.12.2013, 13:58     Оператор scanf не считывает с клавиатуры русский символ 'а' #1
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 13:58     Оператор scanf не считывает с клавиатуры русский символ 'а'
Посмотрите здесь:

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. C++
Программа,которая считывает с клавиатуры текст C++
Написать программу, которая считывает с клавиатуры текст C++
C++ Написать программу, которая считывает с клавиатуры текст
C++ Заменить в тексте символ, который вводится с клавиатуры на символ *
C++ Неправильно считывает символ
Как вывести символ по адресу scanf C++
C++ Ввести с клавиатуры символ (в переменную char) и определить, соответствует ли введенный символ 'Q' или 'q'

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Doksim
 Аватар для Doksim
57 / 57 / 8
Регистрация: 08.12.2013
Сообщений: 257
14.12.2013, 14:00     Оператор scanf не считывает с клавиатуры русский символ 'а' #2
та вроде все верно.
qwe321
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 23
14.12.2013, 14:50  [ТС]     Оператор scanf не считывает с клавиатуры русский символ 'а' #3
Цитата Сообщение от Doksim Посмотреть сообщение
та вроде все верно.
очень классный ответ)) а можно чуть-чуть поподробнее, что нормального в том, что scanf не считывает символ 'а'?
Yandex
Объявления
14.12.2013, 14:50     Оператор scanf не считывает с клавиатуры русский символ 'а'
Ответ Создать тему
Опции темы

Текущее время: 19:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru