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

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

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

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

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

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

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

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

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

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

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

6
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2012, 01:33 #2
Как связано количество дисков и русский символ 'a' ?
0
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
02.09.2012, 01:44  [ТС] #3
Вот именно, что никак и надо выдавать ошибку. Для любого другого символа выдаётся ошибка.
0
alsav22
5428 / 4823 / 442
Регистрация: 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
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
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
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
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
alsav22
5428 / 4823 / 442
Регистрация: 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
02.09.2012, 13:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2012, 13:17
Привет! Вот еще темы с ответами:

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

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

Проверка ввода - C++
Помогите пожалуйста с проверкой. Нужно, чтобы при вводе массива x, если предыдущее значение больше вводимого, пользователю выдало сообщение...

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


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

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

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