【发布时间】:2020-03-06 15:52:19
【问题描述】:
我正在尝试编写一个函数来检查输入是否是有效的双精度值。因为我最近了解了 switch/case/default 功能,所以我想用它来解决问题
switch(carrier[i]){
case ("+" || "-") : //case 1
if(kvcase == closed){
printf("Error! Invaled input\n");
}
else /*save sign and close case*/
break;
case '.' :
if(deccase == closed){
printf("Error! Invaled input\n");
}
else /*save comma and close case*/
break;
case '[0-9]' : //case 3
break;
case ' ':
printf("staring with whitespace\n");
break;
default:
printf("empty\n");
break;
}
要回答这个问题,请查看代码的 resr。问题只是关于陈述案例的正确方式。
1) 案例 1 有效还是我必须将其分成两个不同的案例
2) 案例 3 是否有效?我正在尝试使用一组数字。所以如果 char carrier[i] 是数字大小写匹配。我知道 isdigit() 函数,但我不想解决这个问题,除非 switch case 无法与集合一起使用。
额外信息: - char* 类型的载体 ist 并已被赋予一个值 - 我正在用 gcc 编译,代码需要符合 c89 标准,不管是什么。
【问题讨论】:
-
"+" || "-"和'[0-9]'均无效。您需要分别检查每个值。这就是switch/case的工作原理。 -
您可以将
case '+': case '-':与单引号和重复大小写一起使用。如果您想从 0 到 9 捕获,则必须以手写方式将其写出来 (case '0': case '1': …: case '9':)。在任何版本的 C 中都没有可用的简写。 -
@JonathanLeffler GCC 允许大小写范围:gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html
-
@qrdl OP 有“代码需要符合 c89 标准”并且 gcc 扩展不在 C89 或任何标准 C 中。
标签: c gcc set switch-statement c89