Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Creating an error message if string entered instead of integer

Posted on 2003-10-27
9
Medium Priority
?
257 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 60 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 60 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
[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

 
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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Steps to fix error: “Couldn’t mount the database that you specified. Specified database: HU-DB; Error code: An Active Manager operation fail”
Did you know there are services out there that can turn an Instagram feed into an RSS feed? I found some interesting exclusive Instagram content which I wanted to follow without signing up for yet another social media account. RSS to the rescue!
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…
Suggested Courses

926 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