Re: [ROOT] Cint and loops?

From: Christian Holm Christensen (cholm@hehi03.nbi.dk)
Date: Mon Sep 02 2002 - 19:37:36 MEST


Hi Ole, 

On Mon, 2 Sep 2002 18:27:37 +0200
Ole Streicher <ole@ifh.de> wrote
concerning "[ROOT] Cint and loops?":
> Hi!
> 
> I have a problem when using interactive cint. The following doesn't
> work for me:
> 
> root [0] TH1F *hist = new TH1F("i", "i", 1000, 0., 1000.);
> root [1] for (Int_t j = 0; j < 1000; j++) {
> !!!Bad command input. Ignored!!!
> root [2] for (Int_t j = 0; j < 1000; j++)
> root [3] {
> end with '}'> hist->Fill(j);
> end with '}'> }
> (Int_t)(-1)
> root [4] hist->Print();
> TH1.Print Name= i, Entries= 1, Total sum= 0
>  
> For me, it is not clear why I can't use the opening brace at the same
> line as the for (; ; ) statement.
> 
> If I set the opening brace to the next line, I dont get the histogram
> filled properly: It has just one entry instead of 1000.
> 
> What is the reason for that and how can I write this loop at command
> line?
> 
> (Sorry for all these questions, but I dont have an "expert" on my site
> who may help with the trivial questions)

Well, you needn't look that far.  The start-up message of ROOT says: 
  
    *******************************************
    *                                         *
    *        W E L C O M E  to  R O O T       *
    *                                         *
    *   Version   3.03/08    20 August 2002   *
    *                                         *
    *  You are welcome to visit our Web site  *
    *          http://root.cern.ch            *
    *                                         *
    *******************************************
  
  FreeType Engine v1.x used to render TrueType fonts.
  Compiled for linux with thread support.
  
  CINT/ROOT C/C++ Interpreter version 5.15.53, Aug 15 2002
  Type ? for help. Commands must be C++ statements.
  Enclose multiple statements between { }.
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ||||||||||||||||||||||||||||||||||||||||

hence the following will work/not work:

  root [0] { for (Int_t i = 0; i < 100; i++) {                                 
  end with '}'> cout << "this is line # " << i << endl; 
  end with '}'> }
  end with '}'> }
  this is line # 0
  this is line # 1
  this is line # 2
  ...
  this is line # 99
  root [1] if (i == 100) { cout << "Hello world" << endl; } 
  Hello world
  (class ostream)1087514176
  root [2] if (i == 100) { // This gives an error 
  !!!Bad command input. Ignored!!!
  root [3] { if (i == 100) {
  end with '}'> cout << "Hello again" << endl; 
  end with '}'> }}
  Hello again
  (class ostream)1087514176
  root [4] if (i == 100) { \ 
  > cout << "Hello world" << endl; \
  > }
  !!!Bad command input. Ignored!!!
 
If the ROOT version of CINT used the GNU readline library, this
probably would be ok, depending on how Masa uses that library. 

Yours, 

 ____ |  Christian Holm Christensen 
  |_| |	 -------------------------------------------------------------
    | |	 Address: Sankt Hansgade 23, 1. th.  Phone:  (+45) 35 35 96 91
     _|	          DK-2200 Copenhagen N       Cell:   (+45) 24 61 85 91
    _|	          Denmark                    Office: (+45) 353  25 305
 ____|	 Email:   cholm@nbi.dk               Web:    www.nbi.dk/~cholm
 | |



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:06 MET