Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Код выводит пустые строки


Автор: Mastodont 19.8.2009, 15:27
Код
Код

//---------------------------------------------------------------------------

#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) должен выдавать текст
Цитата

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

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

А у меня получается
Цитата

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


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

Резвились на просторе
Один из них утоп
Ему купили гроб
И вот вам результат...
Восемь негритят

То есть в двух строчках вместо "Девять негритят" печатается пустое место. Почему так получается?

Автор: Anikmar 19.8.2009, 17:43
А где объявлена переменная prev в обработчике второй кнопки?

Автор: Mastodont 20.8.2009, 12:31
В 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 вроде как объявлена.

Автор: sawfish 20.8.2009, 13:43
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
static int i = 0;
 char prev[24], next[24], count[][8] =        // здесь уберите объявление prev
  {
   "Девять\0", "Восемь\0", "Семь\0", "Шесть\0", "Пять\0", "Четверо\0", "Трое\0", "Двое\0", "Один из\0", "Нет"
  };
 if (i == 9) return;


Автор: Mastodont 20.8.2009, 14:56
Поставил блок
Код

char prev[24], next[24], count[][8] =
  {
   "Девять\0", "Восемь\0", "Семь\0", "Шесть\0", "Пять\0", "Четверо\0", "Трое\0", "Двое\0", "Один из\0", "Нет"
  };

после
Код

TForm1 *Form1;

и убрал изо всех других мест упоминание о prev, и все заработало  smile 
Странно, почему в книжке сделано так, как я показал в первом посте?

Автор: Anikmar 20.8.2009, 16:12
Цитата(Mastodont @  20.8.2009,  14:56 Найти цитируемый пост)
Странно, почему в книжке сделано так, как я показал в первом посте?

Книжки тоже люди пишут, а людям свойственно ошибаться

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)