Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 attempt to read past eof error
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
cloust




PostPosted: Sun Jan 29, 2006 9:17 am   Post subject: attempt to read past eof error

in my program, you can create an account, edit it, login, etc. I was trying to make a search function in the program, where you can lookup your account without having to login. I can succesfully look up the first account in my record, but if I try to lookup anything else, I get an error saying that it attempted to read past eof, and I have no idea why its doing this.

here is the code, I was wondering if anyone could see what I'm missing.
code:
proc sear
    open : filenumber, "WoWaccounts.dat", get
    %%%
    put "enter your accout name: " ..
    get search %search inquiry
    loop
        number += 1 %used to count which account the array is on

        for i : 1 .. number

            get : filenumber, accountc (i).name
            get : filenumber, accountc (i).address
            get : filenumber, accountc (i).pnumber
            get : filenumber, accountc (i).ccard
            get : filenumber, accountc (i).username


            if accountc (i).username = search then

                put "Name: ", accountc (i).name
                put "Adress: ", accountc (i).address
                put "Phone Number: ", accountc (i).pnumber
                put "Credit card: ", accountc (i).ccard
                put "Username: ", accountc (i).username
                coo := 2 % used for an exit condition

                exit
            elsif accountc (i).username not= search then
                put "I'm sorry, there is no user with that name"
            end if

        end for
        if coo = 2 then
            exit
        end if
    end loop
    close : filenumber
end sear
Sponsor
Sponsor
Sponsor
sponsor
Delos




PostPosted: Sun Jan 29, 2006 9:36 am   Post subject: (No subject)

You've read the 'end of file' (eof). Make sure your source file has the correct number of lines (1 for each of the get: statements).
Additionally, you may want to edit your code a bit and try incorporate this sort of routine instead:

code:

var file : int
var temp : string

open : file, "myfile.txt", get
loop
   exit when eof (file)
   get : file, temp
   put temp
end loop
close : file


The 'exit when eof (file)' is the key line. See if you can figure out how to incorporate that into your code (hint, you'll only be using 1 get: statement).
cloust




PostPosted: Sun Jan 29, 2006 10:03 am   Post subject: (No subject)

well, after trying the method you showed, I realised that turing was writing the input to my files wrong. if, say for my phone number, I put (812) 888 3456, it would write each item after the space to a new line.
I have no idea why its doing that.
Delos




PostPosted: Sun Jan 29, 2006 11:11 am   Post subject: (No subject)

Sounds familiar. Post the code for that part of your proggie, I'll take a look at it.
cloust




PostPosted: Sun Jan 29, 2006 11:21 am   Post subject: (No subject)

code:
type account :
    record
        name : string
        address : string
        pnumber : string
        ccard : string
        username : string
        password : string

    end record

proc create



%the procedure for creating an account


    for num : 1 .. 1
        colorback (90)
        locate (10, 27)
        get accountc (num).name : *
        locate (16, 29)
        get accountc (num).address : *
        locate (20, 39)
        get accountc (num).pnumber : *
        locate (24, 42)
        get accountc (num).ccard : *
        locate (28, 45)
        get accountc (num).username : *
        locate (32, 33)
        accountc (num).password := getpass

    end for


    open : filenumber, "WoWaccounts.dat", put, seek, mod
    %put information into a file
    for a : 1 .. 1

        seek : filenumber, *
        put : filenumber, accountc (a).name
        put : filenumber, accountc (a).address
        put : filenumber, accountc (a).pnumber
        put : filenumber, accountc (a).ccard
        put : filenumber, accountc (a).username
        put : filenumber, accountc (a).password
    end for

    close : filenumber
end create
Delos




PostPosted: Sun Jan 29, 2006 1:02 pm   Post subject: (No subject)

Hmm...strange. I just tried out your code and it works fine for me. (I did have to recreate the pertinent undeclared variables though...).
I noticed that you're using seek and mod - these are more commonly used with write: as opposed to put:. It does its job though.
You may want to consider, instead of using them, to read the whole file into a flexy array, get the new info, then put: all of that to the file. Technically a little slower, but might solve your problem (which for some reason doesn't happen to me).
cloust




PostPosted: Sun Jan 29, 2006 2:07 pm   Post subject: (No subject)

okie, I found the tutorial on flexible arrays, so I'll see what I can do. thanks for the help!
redrenagade




PostPosted: Sat Feb 04, 2006 6:17 pm   Post subject: (No subject)

This might help, try to put the "exit when eof" line at the end of your loop. I think your program is exiting when it reaches the end of file, then, for some reason, trying to read the next line of code within the loop.
Sponsor
Sponsor
Sponsor
sponsor
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 8 Posts ]
Jump to:   


Style:  
Search: