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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
#1

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

26.07.2011, 20:32. Просмотров 2974. Ответов 10
Метки нет (Все метки)

Почему при вводе русских символов выпадает ошибка?

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;                                   //ПЕРЕХОД К НАЧАЛУ ВВОДА
    }}
и как исправить ошибку?
0
Миниатюры
Ошибка при вводе русских символов  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2011, 20:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при вводе русских символов (C++):

Непонятные символы при выводе русских символов в консоли - C++
Доброго времени суток, у меня возникла проблема. Когда я ввожу текст с клавиатуры, при выводе его на экран выводит непонятные символы....

Как реализовать вывод ошибки при вводе пользователем символов? - C++
Допустим есть программа выполняющая простейшую операцию, например, нахождение суммы двух целых чисел. Как сделать так, чтобы в случае ввода...

Почему при вводе массива из символов воспринимается только первое слово? - C++
Вот примерный код: char article; int main() { cin &gt;&gt; char; cout &lt;&lt; char; system(&quot;Pause&quot;) ...

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? - C++
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt; &quot;Hello&quot; &lt;&lt; endl; } ...

Ошибка при вводе - C++
мне нужно записать числа с файла в список , подскажите что не так выводит последнее лишнее число не пойму откуда оно берется #include...

Ошибка при вводе матрицы. - C++
Здравствуйте, сейчас пишу программу для проверки матрицы на латинский и магический квадрат, мне каждое действие нужно сделать отдельной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
26.07.2011, 22:38 #2
попробуй после main сразу вставить вот эту строчку
setlocale (LC_ALL, "Russian");
0
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
27.07.2011, 03:41  [ТС] #3
Цитата Сообщение от White Luna Посмотреть сообщение
попробуй после main сразу вставить вот эту строчку
setlocale (LC_ALL, "Russian");
вставлена, толку нет
0
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,001
27.07.2011, 03:55 #4
С одной стороны не видно, как объявлена переменная familya.
С другой стороны, видно метку с таким же именем
Но как вариант, можно попробовать вместо isalpha использовать iswalpha. Локаль при этом должна быть выставлена правильно.
1
Zverit
Уничтожитель печенек
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
27.07.2011, 10:21 #5
Ошибка указывает на 68 строку, что это за строка?
0
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,001
27.07.2011, 10:31 #6
Цитата Сообщение от ITZver Посмотреть сообщение
Ошибка указывает на 68 строку, что это за строка?
Да это же в глубине микрософтовской либы.
0
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 Посмотреть сообщение
Да это же в глубине микрософтовской либы.

Не по теме:

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

1
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,001
27.07.2011, 10:51 #8
Цитата Сообщение от ITZver Посмотреть сообщение
Возможно русские буквы преобразуются в -1. Предполагаю, что у вас в системе char является знаковым. Поэтому, нужно преобразовать перед использованием isalpha в unsigned char
Да, пожалуй это оно. Только они не в -1 преобразуются, конечно, а просто русские буквы изначально с отрицательными кодами, а после преобразованиия int->unsigned коды становятся очень большими.
Явное приведение к unsigned char должно помочь.
0
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]);
тоже не помогло? может еще что-нибудь?
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
28.07.2011, 14:44 #10
Напишите полностью весь код лучше для начала.
0
easybudda
Модератор
Эксперт CЭксперт С++
9627 / 5575 / 947
Регистрация: 25.07.2009
Сообщений: 10,710
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;
}
Ошибка при вводе русских символов
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2011, 23:38
Привет! Вот еще темы с ответами:

Ошибка при вводе дерева - C++
В заданном непустом бинарном дереве найти длину (число ветвей) пути от корня до ближайшей вершины со значением, равным заданному....

Непонятная ошибка при вводе - C++
Дана символьная строка. Слово - последовательность символов между пробелами, не содержащая пробелы внутри себя. Определить количество слов...

Ошибка при вводе строки ! - C++
Точнее не ошибка а не могу ввести строку(не вводится)! Подскажите в чём дело, заранее благодарен! Вот код, функция void vvod(char **D) ...

Ошибка при вводе числа - C++
Подозреваю, что где-то нужно обнулить переменную rows. Потому что (как показано на скрине) число &quot;45&quot; всегда состоит из первой цифры кол-ва...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2011, 23:38
Ответ Создать тему
Опции темы

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