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

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

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

Подсчет вводимых символов C++
Замена вводимых символов C++
C++ Проверка вводимых символов
C++ Проверка вводимых символов
C++ Проверить, можно ли построить треугольник из отрезков с длинами x, y, z. Предусмотреть проверку вводимых данных на отрицательность
C++ 5. Определить, является ли заданное целое число А нечетным двузначным числом. Предусмотреть проверку вводимых данных на отрицательность
Вычислить длину окружности, площадь круга и объем шара одного и того же заданного радиуса. Предусмотреть проверку вводимых данных на отрицательность C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RamonN
 Аватар для RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
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
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
14.05.2014, 08:04     Реализовать проверку на количество вводимых символов #5
Используйте метод getline с указанием предельной длины:
C++
1
2
char str[16];
cin.getline(str,15);
Ilot
Модератор
Эксперт С++
1778 / 1153 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
14.05.2014, 08:25     Реализовать проверку на количество вводимых символов #6
А можно еще и вот так:
C++
1
std::cin >> std::setw(SIZE + 1) >> value;
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
14.05.2014, 08:33     Реализовать проверку на количество вводимых символов #7
Цитата Сообщение от Ilot Посмотреть сообщение
А можно еще и вот так:
std::cin >> std::setw(SIZE + 1) >> value;
Нюанс такого ввода в том, что текст вводится до первого пробельного символа,
т.е. вводится одно слово.
Ilot
Модератор
Эксперт С++
1778 / 1153 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 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, ага в итоге вы были ближе к истине
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2014, 12:57     Реализовать проверку на количество вводимых символов
Еще ссылки по теме:

C++ 6. Определить, имеется ли среди заданных целых чисел A, B, C хотя бы одно четное. Предусмотреть проверку вводимых данных на отрицательность
C++ Как ограничить количество вводимых символов с клавиатуры?
C++ Задать максимально разрешенное количество вводимых символов (std::string)
Реализовать проверку ввода C++
Реализовать функцию без параметров, определяющую количество символов, отличных от пробела C++

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

Или воспользуйтесь поиском по форуму:
jurok_85
238 / 221 / 76
Регистрация: 21.02.2013
Сообщений: 515
Завершенные тесты: 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 символов то все равно не прекращается ввод?
Yandex
Объявления
14.05.2014, 12:57     Реализовать проверку на количество вводимых символов
Ответ Создать тему
Опции темы

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