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

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

Войти
Регистрация
Восстановить пароль
 
Seroo
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
#1

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

04.10.2012, 16:46. Просмотров 831. Ответов 9
Метки нет (Все метки)

есть массив из длины 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++
Удалить из строки слова,длина которых меньше заданной,решите пожалуйста,за ранее спасибо)))

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

Вывести все слова из строки длина которых меньше заданной - C++
Составить программу посимвольной обработки,без всяких функций из strin.h(!!!), с помощью puts и gets для такой задачи: Вывести все слова...

Определить длину введенной строки, и, если длина больше заданной, то удалить символы от a до z - C++
Здравствуйте можете пожалуйста помочь с задачей на строки. Очень прошу. Определить длину введенной строки, и, если длина больше 15, то...

Напечатать все строки, длина которых меньше заданного числа - C++
Прошу помочь с небольшой задачкой: Работа с текстовыми файлами. Дан текстовый файл. Напечатать все строки, длина которых меньше...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
04.10.2012, 17:08 #2
Вопрос, ты зачем вводишь больше 21, если у тебя размер 21?

void main() - писать неправильно.
Seroo
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
04.10.2012, 17:43  [ТС] #3
мне нужно обеспечить ввод правельности данных при любых входных данных.... поетому ввожу больше 21, чтоб проверить ...
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
04.10.2012, 17:56 #4
ну так и увеличи n, на столько чтобы тебе хватало.
Кот Ангенс
317 / 267 / 38
Регистрация: 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
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
04.10.2012, 18:31  [ТС] #7
для меня русский язык не родной, если я n поставлю 50 препод ведет 52 к примеру и скажет что не верно работает программа .....
Кот Ангенс
317 / 267 / 38
Регистрация: 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
59 / 59 / 4
Регистрация: 22.12.2011
Сообщений: 972
04.10.2012, 19:06  [ТС] #9
спасибо, а без динам. выдиления памяти никак нерзя это реализовать ?
alsav22
5417 / 4813 / 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2012, 09:10
Привет! Вот еще темы с ответами:

Перепишите из входного файла в выходной только те строки, длина которых меньше 70 - C++
Помогите пожалуйста с решением задачки. Перепишите из входного файла в выходной только те строки, длина которых меньше 70. Строки...

Удалить из строки все слова, длина которых меньше пяти символов - C++
Доброго времени суток, условие в заголовке. Возможно ли добавить символ к строке? #include &lt;iostream&gt; #include &lt;string&gt; #include...

Если длина введенной строки кратна 4, первую часть строки поменять местами со второй - C++
Если длина введенной строки кратна 4, первую часть строки поменять местами со второй.

Вывести на консоль те строки, длина которых меньше (больше) средней, а также длину. - C++
Собственно вот проблема..Мне помогали писать данную программу но она что-то все равно не работает. Она просто тупо зависает. Может кто...


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

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

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