Switch Statement case '0': .. case '9'

Paul phshaffer at gmail.com
Thu Jun 14 09:37:06 PDT 2012


On Thursday, 14 June 2012 at 16:16:19 UTC, Timon Gehr wrote:
> On 06/14/2012 05:59 PM, Paul wrote:
>> The book in section 3.5 gives these valid case examples:
>>
>> case ’0’: .. case ’9’:
>> case ’A’: .. case ’Z’: case ’a’: .. case ’z’:
>> case ’.’, ’,’, ’:’, ’;’, ’!’, ’?’:
>>
>> In my code:
>>
>> case "STEP01": ...compiles and works correct
>> case "STEP01", "STEP02": ...compiles and works correct
>> case "STEP01": .. case "STEP50": ...compiler reports:
>>
>> iccstats.d(27): Error: Integer constant expression expected 
>> instead of
>> "STEP01"
>> iccstats.d(27): Error: Integer constant expression expected 
>> instead of
>> "STEP50"
>> iccstats.d(27): Error: integral constant must be scalar type, 
>> not
>> const(char[])
>>
>> Help please.
>
> case-range expressions don't work with strings. (because there 
> is no general way to meaningfully fill in the gap.)
>
> You could automatically generate the case statements via a 
> string mixin (untested):
>
> mixin({
>     string r;
>     foreach(i;1..51) r~=`case 
> "STEP`~(i<10?"0":"")~to!string(i)~`":`;
>     return r;
> }());
>
> But that is probably overkill, why not just parse the string 
> with an if statement?
>
> If you need fallthrough, you can use a goto statement
>
> if(...) goto Lstepn;
> switch(...){
>     case ...:
>         ...
>         break;
>     Lstepn:
>     case ...:
>         ...
>         break;
> }

What are those examples I quoted from the book?  Aren't they 
string ranges?

>> case ’0’: .. case ’9’:
>> case ’A’: .. case ’Z’: case ’a’: .. case ’z’:


More information about the Digitalmars-d-learn mailing list