12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
1

Проверка ввода. Символ 'а' (rus)

02.09.2012, 00:22. Показов 691. Ответов 6
Метки нет (Все метки)

В функции main присутствует проверка:
C++
1
2
3
4
5
6
7
8
9
10
    for(;;){
            cout << "Введите количество дисков (0-выход): ";
            fflush(stdin);
            if(scanf("%i", &count) != 1 || cin.rdbuf()->in_avail()!=1 || count < 0)
                cout << "Неверный ввод\n\n";
            else if(count > 64) 
                cout << "Максимальное число дисков: " << max_count <<
                endl << endl;
            else break;
        }
При вводе русского символа a, ввода почему-то не происходит, даже, если ввести 10 символов а(русских) и программа требует что-то вводить. Почему так?

Добавлено через 8 минут
Могу показать весь код, если надо.
Вот думаю может быть так: что символ а соотв. какому-то пробелу?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2012, 00:22
Ответы с готовыми решениями:

Visual C++ проверка ввода на число, проверка на кирилицу
Суть ввести с клавиатуры нечто, и повторять ввод до тех пор пока введенное число не будет числом. ...

Как в Qt задать локаль типа "rus-rus" ?
Ну наверное системную локаль... Чтоб это было кроссово.... :) Добавлено через 39 минут Меня...

конец ввода символ !
Доброе утро, может вы подскажите как можно сделать это. Вот задачка. &quot;Пользователь вводит...

Символ после консольного ввода
Как сделать так, чтобы во время ввода от пользователя в C# на строке ввода после string шел символ...

6
5488 / 4883 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2012, 01:33 2
Как связано количество дисков и русский символ 'a' ?
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
02.09.2012, 01:44  [ТС] 3
Вот именно, что никак и надо выдавать ошибку. Для любого другого символа выдаётся ошибка.
0
5488 / 4883 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2012, 03:01 4
count как объявлен?

В студии всё работает нормально. mingv при любом вводе писал, что ввод неверный, пока не убрал из if это: cin.rdbuf() -> in_avail() != 1. После этого всё нормально стало работать. Русскую 'a' не пропускает.

Добавлено через 19 минут
В mingv эта конструкция: cin.rdbuf() -> in_avail(), почему-то всегда выдаёт 0 (при любом вводе). В студии, при правильном вводе: 1, при неверном: 2 и более. Что даёт её наличие в условии проверки?
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
02.09.2012, 03:53 5
alsav22,
Returns: If a read position is available, returns egptr() - gptr(). Otherwise returns showmanyc()
C++
1
char_type* egptr() const;
3 Returns: The end pointer for the input sequence.
C++
1
char_type* gptr() const;
2 Returns: The next pointer for the input sequence.
C++
1
streamsize showmanyc();
306
1 Returns: An estimate of the number of characters available in the sequence, or -1. If it returns a
positive value, then successive calls to underflow() will not return traits::eof() until at least that
number of characters have been extracted from the stream. If showmanyc() returns -1, then calls to
underflow() or uflow() will fail.307
2 Default behavior: Returns zero.
3 Remarks: Uses traits::eof().
0
2477 / 1904 / 951
Регистрация: 21.12.2010
Сообщений: 3,473
Записей в блоге: 10
02.09.2012, 10:12 6
в mingw надо бы так
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    std::size_t num;
    std::ios::sync_with_stdio(false);
    std::cout << "Input number of drives: ";
    std::cin >> num;
    std::cout << std::cin.rdbuf()->in_avail();
    return 0;
}
0
5488 / 4883 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2012, 13:17 7
Цитата Сообщение от bgm313 Посмотреть сообщение
При вводе русского символа a, ввода почему-то не происходит, даже, если ввести 10 символов а(русских) и программа требует что-то вводить. Почему так?
У меня в студии и в mingv это происходит, если в коде прописать:
C++
1
setlocale(0,"");
Без этого русскую 'a' не пропускает. Если так сделать:
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
то нормально всё работает. Почему это происходит - не знаю.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2012, 13:17
Помогаю со студенческими работами здесь

Esc как символ конца ввода
Доброго времени суток. Есть такой вопрос. Как мне закончить ввод при нажатии esc. Например, если...

Проверка на символ @
Здравствуйте, столкнулся с такой проблемой не могу найти код для проверки на знак &quot;@&quot; Нашел вот...

Ввести определенный символ, обозначающий конец ввода
В общем мне нужно после нажатия на определённый символ допустим это &quot;h&quot; срабатывало действия, и что...

Как вернуть символ обратно в поток ввода
Добрый день. Подскажите, пожалуйста, аналог функции cin.putback() из C++, которая возвращает...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru