Solved

Creating an error message if string entered instead of integer

Posted on 2003-10-27
9
250 Views
Last Modified: 2010-04-16
What I am trying to achieve is a simple error message to print on the screen if the user types a string instead of an integer something along the lines of ('Please type an integer!') however this isn't as simple as i first thought.  Here is what I have so far: -

program Task_8;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  s:string;
  x,y:integer;
  total:integer;
  j:integer;
  oksofar:boolean;
  thischaracter:char;
  thisord:integer;
begin
        oksofar:=true;
  j:=1;
  begin
  Writeln('Please enter the first number: ');
    thischaracter:=s[j];
    thisord:=ord(thischaracter);
    if ((thisord<48) or (thisord>57)) then begin
      oksofar:=false;
    end; //end if
    if (oksofar = false) then begin
    write(strToInt(s));
    writeln('Please enter an integer!');
  end else begin
        Write('Please enter the first number: ');
        readln(x);
        write('Please enter the second number: ');
        writeln;
        write('Please enter the second number: ');
        readln(y);
        writeln;
        if (y < x) then  begin
              total:= x * y;
              writeln('x times y = ',total);
      end else begin
              total:= x - y;
              writeln('x minus y = ',total);
    end;
end;
end;
end.

Any help would be much appreciated
0
Comment
Question by:Jenko_2003
  • 5
  • 3
9 Comments
 
LVL 17

Assisted Solution

by:Wim ten Brink
Wim ten Brink earned 20 total points
ID: 9627754
Oh. brother... What's wrong with the Val function???

var
  s:string;
  X, Code: Integer;
begin
   ReadLn(s);
  Val(S, X, Code);
  if (Code=0) then begin
    // X is a valid number
  end
  else begin
    // Code contains the index of the invalid character so something like:
    WriteLn(S);
    WriteLn('':Code-1, '^ Invalid character');
    // Should do the trick.
  end;

Please don't re-invent the wheel again. We already have too many of them already. (And the Val function exists almost as long as the Pascal language itself...)
0
 

Author Comment

by:Jenko_2003
ID: 9628914
Thankyou for your help, the reason I havn't used the val function is because im newly studying the language and we have not covered val function yet but we have covered the ord function.
0
 
LVL 1

Accepted Solution

by:
JackNaif earned 20 total points
ID: 9637356
Jenko,
this looks very much like homework, so we're not allowed to solve for you, but we can give you some orientation. I can guide you a little bit. But you must do the heavy work. =)

In the first place, you must pick one of the two different ways of treating the input that I can see in your code:

Option 1: get a string and process the characters one by one with stuff like s[i] and the like. (In your code, you do this BEFORE assigning any value to s. That won't work.)

Option 2: get one char at a time with multiple readln() invocations. You've also got a draft of this in your code but it still needs some work.

Both options are good (for a beginer's homework) but in a professional programme, option 2 is completely unacceptable.

Once you've decided that, it's simple:

1) get the input
2) check for non numbers in the input (or make sure all the chars in the input are numbers, whichever way you like it).
3) unless input is OK, go back to one (note that this will mean that the begining of a loop is before the code that represents 1: a "repeat" or some initialisation and a "while")
4) by the time you get here, you've got an input that's OK: now you can do the "ord" thing (beginers only) or read the help for "val", as Workshop_Alex suggests.

Now try to get that into Pascal, and if you find problems doing it, ask again (with the new code, which will look *very* different. =)

Regards:

Jack


0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 1

Expert Comment

by:JackNaif
ID: 9637371
Oops! One more detail:

You print the error message on step 3), only if the input is not OK and right before moving back to 1)

Jack
0
 

Author Comment

by:Jenko_2003
ID: 9638048
Thankyou Jack, it isn't homework, it's work which we can do which will help us learn more Pascal, I actually appreciate you telling me how to do it rather than just pasting the code, because as i said it isn't being marked it's just to help me.  So thankyou very much for taking the time out to explain things as it helps a great deal.
0
 
LVL 1

Expert Comment

by:JackNaif
ID: 9643713
No problem, Jenko.

As I said: just try to code it, and if you get stuck at any point, come back here for more help. =)
0
 
LVL 1

Expert Comment

by:JackNaif
ID: 9657692
Well????

How did it go???

Could you make it work??

Still stuck??
0
 

Author Comment

by:Jenko_2003
ID: 9662593
My bad, yeah I perserveered (sp?) and I got there in the end.  Im not at home at the minute so I can't paste my final code.  I decided to use the val function in the end as the ord function was lots more code than the val function.  Thanks for your help, I appreciate it.  How can I accept two comments?
0
 
LVL 1

Expert Comment

by:JackNaif
ID: 9670489
You've got to split points.
Check this URL:

<http://www.experts-exchange.com/help/closing.jsp#3>
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

When we purchase storage, we typically are advertised storage of 500GB, 1TB, 2TB and so on. However, when you actually install it into your computer, your 500GB HDD will actually show up as 465GB. Why? It has to do with the way people and computers…
This article outlines the process to identify and resolve account lockout in an Active Directory environment.
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

773 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question