Author |
Message |
djlenny_3000
|
Posted: Fri Oct 29, 2004 8:45 am Post subject: [tutorial] error proofing |
|
|
for everyone who hates it when you need an integer but someone puts in a string here is a way to stop that
the key is STRINT and STRINTOK
here is an example
var num :int
put "enter a number and i will square it"
get num
put num*num
if someone enters "s" the program crashes
so here is how you fix that
code: |
% declare variables
var num:int
%this variable is what you ask for
var input:string
put "enter a number and i will square it"
%the key part
get input
loop
%this exits the loop when in the string there is a integer other forms are %strrreal intstr and realstr each converting from the first part to the %second part. if ok is on the end then it checks it first
exit when strintok(input)
%keep trying till they get it right
put"bad input"
get input
end loop
%now to change it from string to integer
num:=strint(input)
put num*num
|
strintok checks for the integer in the string and strint converts it, if you have a question then ask. also dont forget you can use strrealok ans strreal to go from string to real and realstr or intstr to go back to string
hope this helped |
|
|
|
|
|
Sponsor Sponsor
|
|
|
Delos
|
Posted: Fri Oct 29, 2004 10:42 am Post subject: (No subject) |
|
|
Hmm...ok the good parts first:
This is definitely an aspect of OOT that people new to it struggle to fix. This will be a good tutorial for people who need such help.
Bad parts:
First off, this was supposed to error proof (trap) the input. Sadly, this has only been restricted to catching errors in terms of int-string input. Try these inputs:
Ctrl + Z
A string/number of more than 255 characters long
Both of these crash.
In other words, you're not error proofed yet. Is this problem fixable? Of course it is, find out how and update your tutorial. |
|
|
|
|
|
sw1tch
|
Posted: Sun Jan 02, 2005 4:21 pm Post subject: (No subject) |
|
|
Delos wrote: Hmm...ok the good parts first:
This is definitely an aspect of OOT that people new to it struggle to fix. This will be a good tutorial for people who need such help.
Bad parts:
First off, this was supposed to error proof (trap) the input. Sadly, this has only been restricted to catching errors in terms of int-string input. Try these inputs:
Ctrl + Z
A string/number of more than 255 characters long
Both of these crash.
In other words, you're not error proofed yet. Is this problem fixable? Of course it is, find out how and update your tutorial.
Why dont you tell us sir? i'd Like to know |
|
|
|
|
|
Andy
|
Posted: Sun Jan 02, 2005 7:08 pm Post subject: (No subject) |
|
|
well to avoid the buffer overflow, simply use
instead since then you will only be getting the first 255 characters.. but as for the ctrl+d and ctrl+c.. i have no idea how to get rid of that using ur method.. i'd just use a gui text field haha |
|
|
|
|
|
Tony
|
Posted: Sun Jan 02, 2005 9:44 pm Post subject: (No subject) |
|
|
you can write your own keyboard handling methods that are based on Input.KeyDown() |
|
|
|
|
|
lasworddeladreams
|
Posted: Wed Dec 21, 2005 8:05 pm Post subject: Strintok great but not working |
|
|
I'm in a grade 11 compsci class and we are using Turing v6.55 which resides on a DOS disk. We've been given the same task: Make our programs crashproof. Three so far have been able to figure it out (and to think I helped them!). I've tried for hours to try to get strintok to work but alas it doesn't. I think its a great command but i cant use it. Would someone please post telling me why the command wont work? Please? |
|
|
|
|
|
Cervantes
|
Posted: Wed Dec 21, 2005 8:36 pm Post subject: Re: Strintok great but not working |
|
|
lasworddeladreams wrote: Turing v6.55
Gah?! Turing goes up to v4.1, and v4.1 is not too much more than a rumour at the moment.
lasworddeladreams wrote: Would someone please post telling me why the command wont work? Please?
That's a tough question, since it will work. The reason that you haven't got it to work is unknown to us, so long we can't see your code. |
|
|
|
|
|
do_pete
|
Posted: Wed Dec 21, 2005 10:30 pm Post subject: (No subject) |
|
|
Perhaps the old DOS based Turing goes up to v.6? As for Turing 4.1 tomorow I'll post something that'll make you believe... |
|
|
|
|
|
Sponsor Sponsor
|
|
|
lasworddeladreams
|
Posted: Wed Dec 21, 2005 11:20 pm Post subject: Thanks |
|
|
Many thanks to you Cervates and do_pete. I wasn't really expecting a reply to my post. Thanks again and as for my code here it is:
var number : string
var number1 : int
get number : 255
loop
exit when strintok(number)
if number <= "/" or number >= ":" then
put "This is not a number. Please try again."
get number : 255
end if
end loop
number1 := strint(number)
put number1
This is the modified version of the code our teacher gave us.
Thanks again! |
|
|
|
|
|
McKenzie
|
Posted: Wed Dec 21, 2005 11:20 pm Post subject: (No subject) |
|
|
Ouch... DOS version 6 ???
DOS version 8 came out about 6 years ago. I recall using 7.x about 11 years ago. Version 6 has to be at least 15 years old. |
|
|
|
|
|
McKenzie
|
Posted: Wed Dec 21, 2005 11:25 pm Post subject: (No subject) |
|
|
As for the problem at hand, use getch, or getchar to check each character one at a time to make sure they are valid digits.
Lastwords - get rid of your if in your loop "if number <= "/" or number >= ":" then" If it's a valid int the exit will kick you out of the loop. If you are still in the loop then you know it is invalid. |
|
|
|
|
|
do_pete
|
Posted: Wed Dec 21, 2005 11:45 pm Post subject: (No subject) |
|
|
Yes you have to get rid of the if statement because it'll only ask for another number if the input is within that range. And dont bother with getch, get will work fine |
|
|
|
|
|
lasworddeladreams
|
Posted: Thu Dec 22, 2005 7:47 am Post subject: Thanks again! |
|
|
I'd like to thank you McKenzie and do_pete for your posts. I have since modified my program. Unfortunately, it still does not work. Turing keeps telling me that strintok has not been declared. Guess it's because we're using Turing v6.55 for MS-DOS v6.22. Anyway, following your instructions, I came up with this:
var number : string
var number1 : int
loop
get number : 255
exit when strintok(number)
end loop
number1 := strint(number)
put number1
Thanks for all your help! |
|
|
|
|
|
Draymire
|
Posted: Thu Nov 20, 2008 9:08 am Post subject: RE:[tutorial] error proofing |
|
|
i Have found a way to crash proof a program completely from operations such as ctrl-z.
use this simple yet effective program to do it
var input:string(1)
var output:string:=""
loop
getch (input)
exit when input=chr(10)% a space
put input ..
output:=output+input
exit when length(output)=255
end loop
put""
put output
the answer was the simple use of getch.
if combined with the strintok commands you could completely idiot proof all your programs. |
|
|
|
|
|
|