Forum > Beginners

Question about a space being generated after subject in a record



I was following a tutorial that I dug up online.  I entered in an example code and kept getting a newline after printing the subject and not sure what to fix.

Here's the code:

--- Code: ---program exRecords;
uses crt;
  Books = record
    title : packed array[1..50] of char;
    author : packed array[1..50] of char;
    subject : packed array[1..100] of char;
    book_id : longint;

    Book1, Book2 : Books; {Declare book1 and book2 of type Books}

  {book1 specification}
  Book1.title := 'C Programming'; := 'Nuha Ali';
  Book1.subject := 'C Programming Tutorial';
  Book1.book_id := 6495407;

  {book2 specification}
  Book2.title := 'Telecom Billing'; := 'Zara Ali';
  Book2.subject := 'Telecom Billing Tutorial';
  Book2.book_id := 6495700;

  {print book1 info}
  writeln('Book 1 title: ', Book1.title);
  writeln('Book 1 author: ',;
  writeln('Book 1 subject: ', Book1.subject);
  writeln('Book 1 book id: ', Book1.book_id);


  {print book2 info}
  writeln('Book 2 title: ', Book2.title);
  writeln('Book 2 author: ',;
  writeln('Book 2 subject: ', Book2.subject);
  writeln('Book 2 book id: ', Book2.book_id);

--- End code ---

I'm running this on windows 7 64 bit using Lazarus 1.4.
Than ks,

This is the output that would be generated:

C Programming
Nuha Ali
C Programming Tutorial
                                          <---This is unexpected
                                          <---This is expected
Telecom Billing
Zara Ali
Telecom Tutorial
                                          <---This is unexpected

I hope this clarifies what I'm seeing.  I don't know why the little program is doing this.


Basile B.:
By default the console width is 80 chars.

the followings variables fit in a single line:

--- Code: ---title : packed array[1..50] of char;
author : packed array[1..50] of char;

--- End code ---

but not this one:

--- Code: ---subject : packed array[1..100] of char;

--- End code ---

This explains why you have a blank line after writing the subject. Actually it's not blank. it 20 times a null char (#0).

The type packed array[1..100] of char is initialized with 100 null chars. If you want to write only the valid chars, you have to cast it as a null terminated string:

--- Code: ---writeln('Book 1 subject: ', Pchar(@Book1.subject[1]));

--- End code ---

But the tuto you've found is actually obsolete (Probably written 20 years ago !). Since a long time Pascal has dynamic arrays. You can rewrite your record:

--- Code: --- 
Books = record
    title : string;
    author : string;
    subject : string;
    book_id : longint;

--- End code ---

And then you won't have to cast the array of char. However, if in the next tutos you have to write file of records, just keep them a static array.

Ok this was related to the other question I had and it didn't occur to me about that.  Thanks for taking the time to let me know.  I appreciate it. :)


[0] Message Index

Go to full version