Weird problem in while loop: What is wrong with the input "48" compared to "47" and "49"????

Hi everyone!
I have a weird problem in a while loop with user input:
Within the while loop, the user is asked for the input of a number to be assigned to the variable insnr:
1113 insnr = '0';
1114 while insnr == '0';
1115 insnr = input('Inselnummer [1 ... 999] ? ');
1116 answer = isempty (insnr);
1117 while answer == 1;
1118 disp('Gebe eine gültige Inselnummer ein [1 ... 999] !!!');
1119 insnr='0';
1120 answer = isempty (insnr);
1121 end
1122 end
The code works fine for any number but the number "48".
Execution when using e.g. with the input "47" is as follows:
line 1113 [insr =’0’ char] --> 1114 --> 1115 insnr=47 [insnr=47 double] --> 1116 [answer=0] --> 1122 --> proceed with code properly at line 1123
A check on the input variable insnr yields:
K>> whos(insnr)
Name Size Bytes Class Attributes
insnr 1x1 8 double
Execution when using "48" is magically as follows:
line 1113 [insr =’0’ char] --> 1114 --> 1115 insnr=47 [insnr=47 double] --> 1116 [answer=0] --> 1122 --> 1115 and keeps on returning to this line until I use a number different from 48, e.g. 49
if I check on the input variable insnr:
K>> whos(insnr)
Name Size Bytes Class Attributes
insnr 1x1 8 double
Hence, it looks o.k.
Any idea what could be the problem here with the number "48" ... maybe a Hitchhiker's Guide to the Galaxy issue???
Thanks in advance.
Best, Magie

 Accepted Answer

It's because 48 is the ASCII code for '0'.
double('0')
ans = 48
char(48)
ans = '0'
48=='0'
ans = logical
1

5 Comments

Perhaps you meant to have,
insnr = 0;
while insnr == 0;
...
end
Wow! Thanks a lot. That's the solution.
I already thought that it might be related to the translation into hex code or something. But wouldn't have thought that a simple input of a number could get into conflict of the Ascii translation of a string.
Thanks once more for this prompt reply.
Magie
I meant to have the string, to leave the "0" as a number input possible. But I don't need and actually never used it. hence I can change line 1113 to insnr=0.
Wow! Thanks a lot. That's the solution.
You're quite welcome, but please Accept-click the answer to indicate so.
Accept-click done. Took some time to find the button.

Sign in to comment.

More Answers (0)

Categories

Find more on MATLAB in Help Center and File Exchange

Products

Release

R2022b

Asked:

on 11 Oct 2022

Commented:

on 11 Oct 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!