![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 04.11.2012
Сообщений: 22
|
![]()
Привет всем, кто читает данную тему. Уже благодарен за то,что вы тратите свое время на чужие проблемы
![]() Суть проблемы: Значит имеется КУСОК кода(первый кейс в функции switch()), в котором объявлены 2 динамических массива. Оба созданы для какой-либо строки, то есть символьные. 1-ый я создал здоровым, что бы туда точно поместился тот текст, который введет пользователь. 2-ой же массив я создаю уже после того, как известно кол-во символов, которые взбредут в голову пользователю. Мы с помощью функции strcpy() перекидываем содержимое большого массива(1-ого) в маленький ,уже подстроенный под определенное кол-во символов. Все работает замечательно, прям сказка, но... приходит время использовать 2-ой массив во 2-ом кейсе этого свича... Но она объявлена в 1-ом, то есть локальная. Вопрос:нужно каким-либо способом засунуть данные во 2-ой кейс и что бы(желательно) все работало. Я понимаю, что легче сделать так, что бы вынести объявление за свитч и использовать во всех кейсах, НО!, узнаю сколько символов я только в момент отработки кода 1-ого кейса, то есть сначала она у меня равна 0(и если вынести создается массив с 0 символами). Причина, почему я не могу вынести этот код за границы кейса тоже простая: у меня в начале программы есть высвечивается в виде менюшки( её то я и сделал с помощью switch()). И именно в первом кейсе у меня подразумевается ввод текста, а во 2-ом уже работа над этим текстом( то есть над моим динамич. массивом). Вот код: Код:
код в первом кейсе работает нормально, поэтому меня интересует лишь заданный мною вопрос. Заранее спасибо за ответ. Буду признателен за помощь. ![]() |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 04.11.2012
Сообщений: 22
|
![]()
Ну и в начале, как глобальные отмечены эти переменные:
Код:
|
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]() Цитата:
char *text_1, text; switch(...) { ... } |
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 04.11.2012
Сообщений: 22
|
![]()
EUGY, в этом то и проблема,что этого сделать нельзя. Если бы вы внимательно прочитали тему, вы бы поняли) Повторюсь: как видите, я узнаю, сколько будет символов во 2-ом массиве только в теле 1-ого кейса, то есть если я поставлю объявления сразу двух массивов за пределы кейса, то получу 2-ой кейс с количеством ячеек 0, ибо переменная count_simbol сперва равна 0, а лишь потом(в теле 1-ого кейса) я увеличиваю эту переменную до нужного мне размера, что бы влезли только те символы, которые вписал пользователь, без излишеств.
|
![]() |
![]() |
![]() |
#5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,427
|
![]()
Проверьте, но, имхо, это какой-то изврат, нужно как-то переписать.
Код:
![]()
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 11.01.2013 в 00:17. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Уверяю, прочитал внимательно.
Причина, по которой Вы не можете вынести объявление за пределы switch надуманна. Что должно быть во втором кейсе? Если пользователь сразу введет выбор case 2, то что? Никак поверку не сделать? Код:
char * text = NULL; switch(vibor) { case 1: ///// text = ..... break; case 2: if (! text) break; ///// } |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 04.11.2012
Сообщений: 22
|
![]()
BDA, мне так удобно, имею же я право писать, как хочу... не так ли?)
Только что попробовал как вы сказали... к сожалению не выходит.(The variable 'text' is being used without being initialized. как я понял он не видит, как я его инициализировал.) Нужна другая идея) EUGY, ну.. проверка это не первое дело, это уже доработка... для меня пока главное - это тот вопрос, который я задал в начале... |
![]() |
![]() |
![]() |
#8 | |
Пользователь
Регистрация: 04.11.2012
Сообщений: 22
|
![]() Цитата:
На счет 2-ого кейса... не хочу вас грузить лишним, мне главное,что бы он хотя бы видел его, то есть могу вывести весь и показать, что все в порядке(printf("Вот текст: %s", text); ). Остальные операции, которые будут над ним происходить, я думаю осилю. А если нет, то это будет уже другая тема на форуме =) |
|
![]() |
![]() |
![]() |
#9 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,427
|
![]() Цитата:
Попробуйте проинициализировать text, как написал EUGY: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 04.11.2012
Сообщений: 22
|
![]()
BDA, к сожалению и этот вариант тоже не выходит(
Оно пишет тот же <null>, то есть все, что было с ним в 1-ом кейсе он оставил в 1-ом кейсе, а общего со вторым у него только этот NULL ![]() Я вот уже думаю... может создать еще 1 динамический массив и скопировать то, что сделал кейс 1 в этот массив, а потом его кинуть во 2-ой? Хотя, я проблемно это себе представляю, если честно. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
switch и case C++ | countteran | Общие вопросы C/C++ | 18 | 06.04.2013 20:52 |
C++ switch case | frozen__11 | Общие вопросы C/C++ | 6 | 11.11.2012 23:16 |
switch и case | symrak | Общие вопросы C/C++ | 2 | 24.01.2012 15:17 |
switch - case 1 to 5 | boris-blade | Общие вопросы .NET | 1 | 12.03.2010 07:13 |