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

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

Войти
Регистрация
Восстановить пароль
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

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

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

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

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

В результате ввода переменной int присваивается символ - C++
Создайте структуру с именем time. Три ее поля, имеющие тип int, будут называться hours, minutes и seconds. Напишите программу, которая...

Проверка строки на символ - C++
Ретбятууу, че то не допирает до меня один метод я завожу переменную int n; какое мне поставить условие, чтобы проверить введенное число...

Проверка ввода - C++
Как ограничить ввод символов в программе!!!! На каждый символ, который был введен выдавать сообщение о неправильном вводе????? Надо чтоб...

Проверка ввода - C++
Как можно проверить вводимые данные, являются ли они числом. Допустим если ввели &quot;08098рррр9&quot; - запросить повторный ввод, а если &quot;43543&quot;...

Проверка ввода - C++
Доброго вам времени суток. Бывалые, подскажите неопытному, как лучше писать? И если несложно, то скажите почему. for(;;) { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 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
5416 / 4812 / 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
1641 / 1269 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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++
Всем привет. Прошу обясните мне как зделать проверку вводимых даных. Мне нужно к примеру задать числовой масив типа (int). Как зделать так...

C++ проверка ввода - C++
Ребят помогить пожалуста разобраться не работает чертова проверка ввода я в коментарии вынес текст ошибки гляньте ... // laba1.cpp:...

gets() проверка ввода - C++
возникло слабое звено в программке ... max_length = 100; line = new char; ... gets(line); ... вопрос такой: как...

Как прервать поток ввода, введя определенный символ? - C++
Доброго всем времени суток double d; char c; cin &gt;&gt; d; cin &gt;&gt; c; cout &lt;&lt; c &lt;&lt; d; Я ввожу число, которое записывается в d,...

Считывать данные пока не встретится символ '|' обозначающий конец ввода - C++
Нужно считать данные пока не встретится символ '|' обозначающий конец ввода. double val; while(cin &gt;&gt; val) vec.push_back(val) ...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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)
Ответ Создать тему
Опции темы

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