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

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

Восстановить пароль Регистрация
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
02.09.2012, 00:22     Проверка ввода. Символ 'а' (rus) #1
В функции 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 минут
Могу показать весь код, если надо.
Вот думаю может быть так: что символ а соотв. какому-то пробелу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2012, 00:22     Проверка ввода. Символ 'а' (rus)
Посмотрите здесь:

C++ проверка ввода C++
Проверка ввода C++
Проверка ввода C++
C++ gets() проверка ввода
C++ В результате ввода переменной int присваивается символ
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2012, 01:33     Проверка ввода. Символ 'а' (rus) #2
Как связано количество дисков и русский символ 'a' ?
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
02.09.2012, 01:44  [ТС]     Проверка ввода. Символ 'а' (rus) #3
Вот именно, что никак и надо выдавать ошибку. Для любого другого символа выдаётся ошибка.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2012, 03:01     Проверка ввода. Символ 'а' (rus) #4
count как объявлен?

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

Добавлено через 19 минут
В mingv эта конструкция: cin.rdbuf() -> in_avail(), почему-то всегда выдаёт 0 (при любом вводе). В студии, при правильном вводе: 1, при неверном: 2 и более. Что даёт её наличие в условии проверки?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.09.2012, 03:53     Проверка ввода. Символ 'а' (rus) #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().
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
02.09.2012, 10:12     Проверка ввода. Символ 'а' (rus) #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2012, 13:17     Проверка ввода. Символ 'а' (rus)
Еще ссылки по теме:

C++ Esc как символ конца ввода
C++ Проверка строки на символ
C++ Ввести определенный символ, обозначающий конец ввода

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2012, 13:17     Проверка ввода. Символ 'а' (rus) #7
Цитата Сообщение от bgm313 Посмотреть сообщение
При вводе русского символа a, ввода почему-то не происходит, даже, если ввести 10 символов а(русских) и программа требует что-то вводить. Почему так?
У меня в студии и в mingv это происходит, если в коде прописать:
C++
1
setlocale(0,"");
Без этого русскую 'a' не пропускает. Если так сделать:
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
то нормально всё работает. Почему это происходит - не знаю.
Yandex
Объявления
02.09.2012, 13:17     Проверка ввода. Символ 'а' (rus)
Ответ Создать тему
Опции темы

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