i'm building program calculates wether entered value prime number or not. setvalue method:
value declared in header file, it's of type long long. when -15 inserted, output expected:code:-(void)setvalue { boolean instructionsneeded = no; printf("\ntype in number check if it's prime.\n"); ( ; ; ) { if (instructionsneeded == yes) { printf("please insert positive integer, smaller 2^63 (%li).\n", 9223372036854775807); } scanf("%lli", &value); if (value < 1) { printf("oops, value small. "); instructionsneeded = yes; } else if (value > 9223372036854775807) { printf("oops, value big. "); instructionsneeded = yes; } else break; } [self primetester:value]; }
type in number check if it's prime.
-15
oops, value small. please insert positive integer, smaller 2^63 (9223372036854775807).
however, when entering number that's not of type long long, i.e. 0.2, scanf() seems skipped:
type in number check if it's prime.
0.2
oops, value small. please insert positive integer, smaller 2^63 (9223372036854775807).
oops, value small. please insert positive integer, smaller 2^63 (9223372036854775807).
oops, value small. please insert positive integer, smaller 2^63 (9223372036854775807).
etcetera.
i've searched ways check wether value value program can deal (type long long) , wait value entered, found nothing suitable. tried lot, using variable called input of type long double, nothing worked.
also, when enter number higher 2^63, i.e. 100000000000000000000, program doesn't tell it's big:
type in number check if it's prime.
100000000000000000000
no, 9223372036854775807 not prime number, 9223372036854775807 = 7^2 x 73 x 127 x 337 x 92737 x 649657.
appreciated.
there 2 problems.
first scanf() eat characters until bumps 1 not digit. in 0.2 case, gobble 0 , stop @ dot. nasty thing dot remain in input buffer, next time round run same dot again, not modify "value" @ all.
there several ways can solve this, 1 first getting whole line of text user , parsing afterwards. also, note scanf() returns number of input items matched (in second , following loops, zero). use check errors too.
second, when parse big number 64 bit signed integer, , user enters won't fit in signed 64 bit integer, how check work..?
Forums Macs Mac Programming
- iPhone
- Mac OS & System Software
- iPad
- Apple Watch
- Notebooks
- iTunes
- Apple ID
- iCloud
- Desktop Computers
- Apple Music
- Professional Applications
- iPod
- iWork
- Apple TV
- iLife
- Wireless
No comments:
Post a Comment