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

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

Войти
Регистрация
Восстановить пароль
 
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
#1

Реализовать проверку на количество вводимых символов - C++

14.05.2014, 02:18. Просмотров 476. Ответов 8
Метки нет (Все метки)

Допустим, объявлен массив чаров из 16 элементов, пользователь же ввел строку из 17 или более элементов - тогда программа зависает и выбивает ошибку. Как грамотно можно сделать проверку, чтобы в случае перебора - выбивало ошибку и просило ввести строчку по новой?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 02:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать проверку на количество вводимых символов (C++):

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

Задать максимально разрешенное количество вводимых символов (std::string) - C++
Привет ребята! Такая тема: Вводимая строка не должен превышать, допустим, 10 символов (строка хранится в типе string). Делаю так ...

Проверить, можно ли построить треугольник из отрезков с длинами x, y, z. Предусмотреть проверку вводимых данных на отрицательность - C++
Проверить, можно ли построить треугольник из отрезков с длинами x, y, z. Предусмотреть проверку вводимых данных на отрицательность.

5. Определить, является ли заданное целое число А нечетным двузначным числом. Предусмотреть проверку вводимых данных на отрицательность - C++
Определить, является ли заданное целое число А нечетным двузначным числом. Предусмотреть проверку вводимых данных на отрицательность.

Реализовать функцию без параметров, определяющую количество символов, отличных от пробела - C++
Задача: Описать функцию next() без параметров, которая считывает с клавиатуры первый символ, отличный от пробела, и объявляет его своим...

6. Определить, имеется ли среди заданных целых чисел A, B, C хотя бы одно четное. Предусмотреть проверку вводимых данных на отрицательность - C++
6. Определить, имеется ли среди заданных целых чисел A, B, C хотя бы одно четное. Предусмотреть проверку вводимых данных на отрицательность.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 138
14.05.2014, 02:35 #2
Использовать string и его метод size. Если конечно вам необязательно делать с char-ом
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
14.05.2014, 02:41 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
    std::string str;
    std::cout << ">>> ";
    getline(std::cin, str);
    
    while(str.size() > 16)
    {
        std::cout << "Try again: ";
        getline(std::cin, str);
    }
    
    char* chStr = new char[16];
    std::strcpy(chStr, str.c_str());
    
    std::cout << chStr << std::endl;
    
    system("pause");
    return 0;
}
Впрочем как RamonN предлагает. Добавил копирование в массив из char.
Ярослав Никитин
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 70
14.05.2014, 07:44 #4
getline'ном можно.
zss
Модератор
Эксперт С++
6360 / 5924 / 1921
Регистрация: 18.12.2011
Сообщений: 15,229
Завершенные тесты: 1
14.05.2014, 08:04 #5
Используйте метод getline с указанием предельной длины:
C++
1
2
char str[16];
cin.getline(str,15);
Ilot
Модератор
Эксперт С++
1809 / 1166 / 227
Регистрация: 16.05.2013
Сообщений: 3,074
Записей в блоге: 5
Завершенные тесты: 1
14.05.2014, 08:25 #6
А можно еще и вот так:
C++
1
std::cin >> std::setw(SIZE + 1) >> value;
zss
Модератор
Эксперт С++
6360 / 5924 / 1921
Регистрация: 18.12.2011
Сообщений: 15,229
Завершенные тесты: 1
14.05.2014, 08:33 #7
Цитата Сообщение от Ilot Посмотреть сообщение
А можно еще и вот так:
std::cin >> std::setw(SIZE + 1) >> value;
Нюанс такого ввода в том, что текст вводится до первого пробельного символа,
т.е. вводится одно слово.
Ilot
Модератор
Эксперт С++
1809 / 1166 / 227
Регистрация: 16.05.2013
Сообщений: 3,074
Записей в блоге: 5
Завершенные тесты: 1
14.05.2014, 08:58 #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от zss Посмотреть сообщение
Нюанс такого ввода в том, что текст вводится до первого пробельного символа,
т.е. вводится одно слово.
Не возражаю, но ведь в конечном итоге важно то что нужно ТС. Я же не написал что так лучше а заметил, что имеется и иная возможность. Так как пример использование манипулятора setw во входном потоке редко где встречается
Но в любом случае не забываем проигнорировать остальную часть строки:
C++
1
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Добавлено через 20 минут
Цитата Сообщение от Blueeyer Посмотреть сообщение
Как грамотно можно сделать проверку, чтобы в случае перебора - выбивало ошибку и просило ввести строчку по новой?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
int main ()
{
    system("chcp 1251");
    const int SIZE = 5;
    std::string str;
    do {
        getline(std::cin, str);
        if(str.size() > SIZE)
            std::cout << "Введенная строка превышает заданный размер. Пожалуйста повторите ввод: " << std::endl;
    }
    while(str.size() > SIZE);
    //Ваш код
    /*
     *
     */
    return 0;
}
zss, ага в итоге вы были ближе к истине
jurok_85
241 / 224 / 77
Регистрация: 21.02.2013
Сообщений: 519
Завершенные тесты: 1
14.05.2014, 12:57 #9
вот никак не могу понять почему такой способ не работает например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main ()
{
  char c;
  char str[16];
 
  int i = 0;
 
while (i != 16){
    c=getchar();
    str[i] = c;
    i++;
 
  }
 
   puts(str);
  return 0;
}
на вводе даже когда превысил 16 символов то все равно не прекращается ввод?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2014, 12:57
Привет! Вот еще темы с ответами:

Вычислить длину окружности, площадь круга и объем шара одного и того же заданного радиуса. Предусмотреть проверку вводимых данных на отрицательность - C++
Вычислить длину окружности, площадь круга и объем шара одного и того же заданного радиуса. Предусмотреть проверку вводимых данных на...

Замена вводимых символов - C++
Как можно в с++ реализовать мгновенную замену введенных символов, скажем на &quot;*&quot;, устройство скрытия пароля. Заранее благодарен.

Подсчет вводимых символов - C++
Добрый вечер. Решил изучить C. Откопал книгу Кернигана и Ричи. В ней приводится пример Тупой вопрос... Как мне проверить этот пример?...

Проверка вводимых символов - C++
Что то я так и не нашел в с++ под линукс есть ли встроенные регэкспы. Мне нужно что бы люди при загрузке файла не могли подменить имя, то...


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

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

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