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

Как ограничить длину вводимой строки? - C++

Восстановить пароль Регистрация
 
BMT_Victor
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 7
22.03.2016, 20:39     Как ограничить длину вводимой строки? #1
Короче, есть задачка:
Напишите программу на "родном" С++, которая читает с клавиатуры число (целое) и имя (до 15 символов). Спроектируйте программу так, чтобы данные вводились в одной функции, а выводились в другой. Сохраняйте данные в главной программе. Программа должна завершаться, когда пользователь введет число 0. Подумайте о том, как передавать данные между функциями - по значению, по указателю или по ссылке.
Вот, я придумал решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <iomanip>
 
using std::cin;
using std::cout;
using std::setw;
 
void input(int& num_rec, char* name_rec);
void output(int num_to_out, char* name_to_out);
 
const int len = 16;
 
int main(void)
{
    char* name = "0123456789012345";        // Инициализация строки
                                            // на 15 символов плюс \0.
                                            // В этой строке хранится имя
    
    int num(0);                             // Здесь хранится число 
 
    for (;;)
    {
        input(num, name);
 
        if (0 == num)   return 0;       // Выход из бесконечного цикла
 
        output(num, name);
    }
 
    return 0;
}
 
// Функция для ввода данных
void input(int& num_rec, char* name_rec)
{
    cout << "\nEnter a number (0 to end): ";
    cin >> num_rec;
 
    if (0 == num_rec)
        return;
    
 
    cout << "\nEnter a name: ";
    cin.getline(name_rec, len, '\n');
 
    return;
}
 
// Функция для вывода данных
void output(int num_to_out, char* name_to_out)
{
    cout << "\n\n" << setw(10) << "#" << num_to_out
        << "\n" << setw(10) << name_to_out;
 
    return;
}
Он чё-то вылетает на строке, где cin.getline().

http://www.cyberforum.ru/attachment....1&d=1458668132

Что жи не так???
Миниатюры
Как ограничить длину вводимой строки?  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
КОП
348 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 755
22.03.2016, 21:08     Как ограничить длину вводимой строки? #2
Цитата Сообщение от BMT_Victor Посмотреть сообщение
char* name = "0123456789012345";
нельзя в name ничего записывать, т.к. это теперь константа
Igrich
4 / 4 / 7
Регистрация: 07.03.2016
Сообщений: 44
22.03.2016, 21:39     Как ограничить длину вводимой строки? #3
замени:
C++
1
char* name = "0123456789012345";
на
C++
1
char* name = new char[len];
BMT_Victor
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 7
23.03.2016, 00:17  [ТС]     Как ограничить длину вводимой строки? #4
Угу, поправил. Только теперь он проскакивает момент ввода имени и всегда считает, что там пустая строка. Как поправить?
Igrich
4 / 4 / 7
Регистрация: 07.03.2016
Сообщений: 44
23.03.2016, 00:54     Как ограничить длину вводимой строки? #5
Добавь после cin функцию такую.
В потоке cin остаётся знак '\n',его нужно убрать что бы дальше можно было читать имя.
C++
1
2
    cin >> num_rec;
    cin.ignore(256,'\n');
BMT_Victor
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 7
23.03.2016, 11:15  [ТС]     Как ограничить длину вводимой строки? #6
Хорошо, а как тогда ограничить имя пятнадцатью символами?
Igrich
4 / 4 / 7
Регистрация: 07.03.2016
Сообщений: 44
23.03.2016, 11:27     Как ограничить длину вводимой строки? #7
BMT_Victor, ну стоит же глобальная переменная const int len = 16. Поставь 15 и будет тебе 15 символов,больше в массив ты не сможешь засунуть в любом случае. Есть еще проблема с том,что в потоке cin могут остаться лишние символы(к примеру если введешь больше 15 букв). Можно написать что-то вроде:
C++
1
2
3
4
5
6
7
8
9
10
cout << "\nEnter a number (0 to end): ";
    cin >> num_rec;
    cin.clear();
    cin.ignore(256,'\n');
    if (num_rec == 0)
        return;
    cout << "\nEnter a name: ";
    cin.getline(name_rec, len,'\n');
    cin.clear();
    cin.ignore(256,'\n');
Больше чем len ты никак не сможешь поместить в массив.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2016, 22:58     Как ограничить длину вводимой строки?
Еще ссылки по теме:

C++ Как сохранить длину строки в переменной?
C++ Как узнать длину строки TCHAR?
C++ Ограничение на длину вводимой строки в консоли

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

Или воспользуйтесь поиском по форуму:
BMT_Victor
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 7
24.03.2016, 22:58  [ТС]     Как ограничить длину вводимой строки? #8
За массив-то я и не беспокоюсь. Вопрос в том, как бы обезопасить соседние участки памяти от перезаписи, а то, насколько я знаю, это чревато.
Yandex
Объявления
24.03.2016, 22:58     Как ограничить длину вводимой строки?
Ответ Создать тему
Опции темы

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