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

Ошибка при вводе русских символов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
26.07.2011, 20:32     Ошибка при вводе русских символов #1
Почему при вводе русских символов выпадает ошибка?

C++
1
2
3
4
5
6
7
8
9
10
familya:
std::cout << "Введите фамилию!"<<std::endl;
std::cin>>familya;
int i, len = std::strlen(familya);              //ОРГАНИЗУЕМ ПОСИМВОЛЬНОЕ ЧТЕНИЕ СТРОКИ
for(i=0; i<len; ++i){
    std::cout<<std::isalpha (familya[i])<<std::endl;
    if (isalpha (familya[i]) == 0){             //ПРОВЕРКА СИМВОЛОВ, ЕСЛИ НЕ БУКВА ТО ОШИБКА!!!
    std::cout<<"\nerror, try again!\n\n";
    goto familya;                                   //ПЕРЕХОД К НАЧАЛУ ВВОДА
    }}
и как исправить ошибку?
Миниатюры
Ошибка при вводе русских символов  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
26.07.2011, 22:38     Ошибка при вводе русских символов #2
попробуй после main сразу вставить вот эту строчку
setlocale (LC_ALL, "Russian");
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
27.07.2011, 03:41  [ТС]     Ошибка при вводе русских символов #3
Цитата Сообщение от White Luna Посмотреть сообщение
попробуй после main сразу вставить вот эту строчку
setlocale (LC_ALL, "Russian");
вставлена, толку нет
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
27.07.2011, 03:55     Ошибка при вводе русских символов #4
С одной стороны не видно, как объявлена переменная familya.
С другой стороны, видно метку с таким же именем
Но как вариант, можно попробовать вместо isalpha использовать iswalpha. Локаль при этом должна быть выставлена правильно.
Zverit
Уничтожитель печенек
 Аватар для Zverit
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
27.07.2011, 10:21     Ошибка при вводе русских символов #5
Ошибка указывает на 68 строку, что это за строка?
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
27.07.2011, 10:31     Ошибка при вводе русских символов #6
Цитата Сообщение от ITZver Посмотреть сообщение
Ошибка указывает на 68 строку, что это за строка?
Да это же в глубине микрософтовской либы.
Zverit
Уничтожитель печенек
 Аватар для Zverit
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
27.07.2011, 10:38     Ошибка при вводе русских символов #7
Возможно русские буквы преобразуются в -1. Предполагаю, что у вас в системе char является знаковым. Поэтому, нужно преобразовать перед использованием isalpha в unsigned char
C++
1
 isalpha((unsigned char)familya[i]);
Добавлено через 1 минуту
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да это же в глубине микрософтовской либы.

Не по теме:

Извините. С мелкософтом никогда не работал, вот и спросил чисто по логике

grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
27.07.2011, 10:51     Ошибка при вводе русских символов #8
Цитата Сообщение от ITZver Посмотреть сообщение
Возможно русские буквы преобразуются в -1. Предполагаю, что у вас в системе char является знаковым. Поэтому, нужно преобразовать перед использованием isalpha в unsigned char
Да, пожалуй это оно. Только они не в -1 преобразуются, конечно, а просто русские буквы изначально с отрицательными кодами, а после преобразованиия int->unsigned коды становятся очень большими.
Явное приведение к unsigned char должно помочь.
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
27.07.2011, 14:45  [ТС]     Ошибка при вводе русских символов #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
С одной стороны не видно, как объявлена переменная familya.
char familya[255];

Добавлено через 1 минуту
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но как вариант, можно попробовать вместо isalpha использовать iswalpha. Локаль при этом должна быть выставлена правильно.
не помогло =\

Добавлено через 1 минуту
[QUOTE=ITZver;1868882]Возможно русские буквы преобразуются в -1. Предполагаю, что у вас в системе char является знаковым. Поэтому, нужно преобразовать перед использованием isalpha в unsigned char
C++
1
 isalpha((unsigned char)familya[i]);
тоже не помогло? может еще что-нибудь?
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
28.07.2011, 14:44     Ошибка при вводе русских символов #10
Напишите полностью весь код лучше для начала.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2011, 23:38     Ошибка при вводе русских символов
Еще ссылки по теме:

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? C++
C++ Ошибка при вводе дерева
Непонятные символы при выводе русских символов в консоли C++
Как реализовать вывод ошибки при вводе пользователем символов? C++
Почему при вводе массива из символов воспринимается только первое слово? C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
28.07.2011, 23:38     Ошибка при вводе русских символов #11
Не понял, что хотел ТС, просто для разнообразия
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
#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
#include <locale.h>
 
#define WORD_LEN 128
#define WORD_MASK "%127ls"
 
const wchar_t * rets[] = { L"буква", L"не буква" };
const wchar_t * prompt = L"Слово";
 
int main(void){
    wchar_t buf[WORD_LEN];
    int i, len;
    
    setlocale(LC_ALL, "");
    
    while ( printf("%ls: ", prompt) && scanf(WORD_MASK, buf) == 1 ){
        len = wcslen(buf);
        for ( i = 0; i < len; ++i )
            printf("%lc - %ls\n", buf[i], rets[!iswalpha(buf[i])]);
    }
    
    return 0;
}
Ошибка при вводе русских символов
Yandex
Объявления
28.07.2011, 23:38     Ошибка при вводе русских символов
Ответ Создать тему
Опции темы

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