Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.08.2009, 16:23   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Код выводит пустые строки

Код
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button1Click(TObject *Sender)
{
static int i = 0;
 char prev[24], next[24], count[][8] =
  {
   "Девять\0", "Восемь\0", "Семь\0", "Шесть\0", "Пять\0", "Четверо\0", "Трое\0", "Двое\0", "Один из\0", "Нет"
  };
 if (i == 9) return;
 strcpy(prev, count[i++]); strcat(prev, " негритят");
 ListBox1->Items->Append(prev);
 strcpy(next, count[i]); strcat(next, " негритят");
 Edit1->Text = next;
}        

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 ListBox1->Items->Append(" ");
 ListBox1->Items->Append(prev);
 ListBox1->Items->Append("      Пошли купаться в море");
 ListBox1->Items->Append(prev);
 ListBox1->Items->Append("      Резвились на просторе");
 ListBox1->Items->Append("      Один из них утоп");
 ListBox1->Items->Append("      Ему купили гроб");
 ListBox1->Items->Append("      И вот вам результат");        
}
//---------------------------------------------------------------------------
при поочередном нажатии кнопок "Результат" (Button1Click) и "Новый куплет" (Button2Click) должен выдавать текст
Цитата:
Десять негритят
Пошли купаться в море
Десять негритят
Резвились на просторе
Один из них утоп
Ему купили гроб
И вот вам результат...
Девять негритят

Девять негритят
Пошли купаться в море
Девять негритят
Резвились на просторе
Один из них утоп
Ему купили гроб
И вот вам результат...
Восемь негритят
А у меня получается
Цитата:
Десять негритят
Пошли купаться в море
Десять негритят
Резвились на просторе
Один из них утоп
Ему купили гроб
И вот вам результат...
Девять негритят


Пошли купаться в море

Резвились на просторе
Один из них утоп
Ему купили гроб
И вот вам результат...
Восемь негритят
То есть в двух строчках вместо "Девять негритят" печатается пустое место. Почему так получается?
fs444 вне форума
Старый 19.08.2009, 16:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ListBox1->Items->Append(prev);
Ты уверен что prev виден в этом участке кода?
I'm learning to live...
Stilet вне форума
Старый 19.08.2009, 17:04   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Однозначно не виден )
Странно, что у ТС вообще это скомпилилось. Мне компилятор сразу ругнулся на неизвестный идентификатор.

Если сделать prev глобальной, то все работает.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 19.08.2009, 18:58   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Еще и строки про десять негритят в этом коде не получить, а ТС говорит, что вывелись они. Так что код левый какой-то или результаты выполнения
pu4koff вне форума
Старый 20.08.2009, 13:24   #5
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Нормально компилируется))
В unit.h у меня такой код.
Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TListBox *ListBox1;
        TButton *Button1;
        TEdit *Edit1;
        TButton *Button2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
char prev[24];
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Здесь prev вроде как объявлена.
fs444 вне форума
Старый 20.08.2009, 13:38   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от fs444
Здесь prev вроде как объявлена.
Да, но объявление локальной переменной prev в обработчике кнопки перекрывает глобальное. В итоге в обработчике первой кнопки вы работаете с локальной переменной (и после этого теряете ее значение), а в обработчике второй кнопки - с глобальной, в которой ничего нет.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 20.08.2009, 15:51   #7
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Поставил блок
Код:
char prev[24], next[24], count[][8] =
  {
   "Девять\0", "Восемь\0", "Семь\0", "Шесть\0", "Пять\0", "Четверо\0", "Трое\0", "Двое\0", "Один из\0", "Нет"
  };
после
Код:
TForm1 *Form1;
и убрал изо всех других мест упоминание о prev, и все заработало
Странно, почему в книжке сделано так, как я показал в первом посте?
fs444 вне форума
Старый 20.08.2009, 16:01   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от fs444
Странно, почему в книжке сделано так, как я показал в первом посте?
Ничего странного ) В книгах довольно часто встречаются опечатки и неточности.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить пустые строки с условиями? ru3000 Microsoft Office Excel 9 30.06.2009 00:13
Пустые строки в текстовом файле Dekker Помощь студентам 1 08.05.2009 16:31
Почему то пустые строки zotox Помощь студентам 3 24.03.2009 15:26
Пустые строки в выпадающим списке в ячейке Shavminator Microsoft Office Excel 4 12.08.2008 18:36
Как удалить пустые строки в WORD? KUNAR Microsoft Office Word 2 04.09.2007 20:56