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

Если длина строки меньше заданной, то повторить ввод - C++

Восстановить пароль Регистрация
 
Seroo
 Аватар для Seroo
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
04.10.2012, 16:46     Если длина строки меньше заданной, то повторить ввод #1
есть массив из длины 21 елемент, надо зделать проверку, если длина > заданой повторить ввод.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <iostream>
#define n 21
#define proverka(z,k) {while((strlen(z)+1)>k)  {cout<<"Введено слишком длинное имя !<<"Повторите ввод: "; cin>>z; }}
using namespace std;
void main(void)
{ SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
char imya1[n];
cout<<"Введите имя файла: ";
cin>>imya1;
proverka(imya1,n)
}
если ввожу больше чем 21 символ программа просит ввести ещо раз имя, но при завершении выдает ошибку:Run-Time Check Failure #2 - Stack around the variable 'imya1' was corrupted.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 16:46     Если длина строки меньше заданной, то повторить ввод
Посмотрите здесь:

C++ Необходимо изменить строку так, чтобы длина строки стала равна заданной длине
C++ Перепишите из входного файла в выходной только те строки, длина которых меньше 70
C++, напечатать все строки, длина которых меньше заданного числа C++
C++ EAccessViolation, если длина строки больше 14
C++ Удаление из строки слов, длина которых меньше заданной
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
04.10.2012, 17:08     Если длина строки меньше заданной, то повторить ввод #2
Вопрос, ты зачем вводишь больше 21, если у тебя размер 21?

void main() - писать неправильно.
Seroo
 Аватар для Seroo
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
04.10.2012, 17:43  [ТС]     Если длина строки меньше заданной, то повторить ввод #3
мне нужно обеспечить ввод правельности данных при любых входных данных.... поетому ввожу больше 21, чтоб проверить ...
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
04.10.2012, 17:56     Если длина строки меньше заданной, то повторить ввод #4
ну так и увеличи n, на столько чтобы тебе хватало.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
04.10.2012, 18:11     Если длина строки меньше заданной, то повторить ввод #5
Не лучше ли выделять дополнительную память под строку?
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>
#include <memory.h>
 
using namespace std;
 
const unsigned N = 21;
 
int main() {
    char* s = new char[N];
    unsigned sz = N, i = 0;
    while ((s[i] = cin.get()) != '\n')
        if (++i == sz) {
            char* s2 = new char[sz + N];
            memcpy(s2, s, sz * sizeof(char));
            delete[ ] s;
            s = s2;
            sz += N;
        }
    s[i] = '\0';
    cout << s;
    delete[ ] s;
}
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
04.10.2012, 18:23     Если длина строки меньше заданной, то повторить ввод #6
еще писать правильно не научился, а уже программист. Уважаю)
( не сдержался )
Seroo
 Аватар для Seroo
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
04.10.2012, 18:31  [ТС]     Если длина строки меньше заданной, то повторить ввод #7
для меня русский язык не родной, если я n поставлю 50 препод ведет 52 к примеру и скажет что не верно работает программа .....
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
04.10.2012, 18:36     Если длина строки меньше заданной, то повторить ввод #8
Динамическое выделение памяти - лучшее средство против таких преподов.
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
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>
#include <memory.h>
 
using namespace std;
 
const unsigned N = 21;
 
int main() {
    char* s = new char[N];
    unsigned sz = N, i = 0;
    while ((s[i] = cin.get()) != '\n')
        if (++i == sz) {
            char* s2 = new char[sz + N];
            memcpy(s2, s, sz * sizeof(char));
            delete[ ] s;
            s = s2;
            sz += N;
        }
    s[i] = '\0';
    cout << s;
    delete[ ] s;
}
Seroo
 Аватар для Seroo
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
04.10.2012, 19:06  [ТС]     Если длина строки меньше заданной, то повторить ввод #9
спасибо, а без динам. выдиления памяти никак нерзя это реализовать ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2012, 09:10     Если длина строки меньше заданной, то повторить ввод
Еще ссылки по теме:

C++ Вывести на консоль те строки, длина которых меньше (больше) средней, а также длину.
C++ Из заданной строки удалить слова, длина которых меньше указанной.
C++ Проверить, чтобы длина строки файла была не меньше двух символов

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2012, 09:10     Если длина строки меньше заданной, то повторить ввод #10
Цитата Сообщение от Seroo Посмотреть сообщение
а без динам. выдиления памяти никак нерзя это реализовать ?
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
#include <Windows.h>
#include <string>
#include <iostream>
using namespace std;
 
const int n = 21;
 
int main()
{ 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
char imya1[n];
 
cout << "Введите имя файла: ";
while (!cin.getline(imya1, n))
{
    cin.clear();
    while (cin.get() != '\n');
    cout<<"Введено слишком длинное имя ! Повторите ввод: ";
}
 
cin.get();
return 0;
}
Yandex
Объявления
05.10.2012, 09:10     Если длина строки меньше заданной, то повторить ввод
Ответ Создать тему
Опции темы

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