C89开关箱使用一套
我正在尝试编写一个函数来检查输入是否是有效的双精度值。因为我最近了解了switch/case/default特性,所以我想用它来解决这个问题C89开关箱使用一套,c,gcc,set,switch-statement,c89,C,Gcc,Set,Switch Statement,C89,我正在尝试编写一个函数来检查输入是否是有效的双精度值。因为我最近了解了switch/case/default特性,所以我想用它来解决这个问题 switch(carrier[i]){ case ("+" || "-") : //case 1 if(kvcase == closed){ printf("Error! Invaled input\n"); } else /*save
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是否有效,或者我必须将其分为两个不同的案例
案例3有效吗?我试着用一组数字。因此,如果char carrier[i]是一个数字,那么大小写是匹配的。我知道isdigit函数,但我不想只是回避这个问题,除非开关盒不可能与一个集合一起工作
额外信息:
-carrier ist的类型为char*,并且已被赋予一个值
-我使用gcc编译,代码需要使用c89标准,不管是什么
不,至少从您的意思来看,+| |-的值是1,因为逻辑or运算符| |的操作数+和-中至少有一个是非零的
不,C开关中没有匹配的字符串或正则表达式,使用单引号“大小写为多字节字符”
请注意,除非您中断,否则案例会一直延续到下一个案例,因此类似这样的代码可以工作:
case '+':
case '-':
(void) printf("+ or -\n");
break;
请注意,您需要对“+”和“-”使用单引号使其成为字符。您拥有的+和-是字符串,它们的比较结果与字符不相等,并且无论如何不能通过开关正确匹配,请参阅strcmp
不,至少从您的意思来看,+| |-的值是1,因为逻辑or运算符| |的操作数+和-中至少有一个是非零的
不,C开关中没有匹配的字符串或正则表达式,使用单引号“大小写为多字节字符”
请注意,除非您中断,否则案例会一直延续到下一个案例,因此类似这样的代码可以工作:
case '+':
case '-':
(void) printf("+ or -\n");
break;
请注意,您需要对“+”和“-”使用单引号使其成为字符。您拥有的+和-是字符串,比较起来与字符不相等,并且无论如何都无法通过开关正确匹配,请参阅strcmp。有关您的问题,语法如下所示:
switch (expr) {
case '1':
printf("expr=1");
case '2':
printf("expr=2");
break;
case '3':
printf("expr=3");
break;
}
因此:
案例1无效:用例“1”:案例“2”:。您的案例可能已编译,但未给出预期结果+| |-可能解析为1。
案例3无效:您必须将所有案例从“0”写入“9”。
如果要将其最小化,请在以下情况下使用:
if (c == '+' || c == '-') {
// ...
} else if (c == '.') {
// ...
} else if ('0' <= c && c <= '9') { // or isdigit(c)
// ...
} else {
// invalid character
}
对于您的问题,语法如下所示:
switch (expr) {
case '1':
printf("expr=1");
case '2':
printf("expr=2");
break;
case '3':
printf("expr=3");
break;
}
因此:
案例1无效:用例“1”:案例“2”:。您的案例可能已编译,但未给出预期结果+| |-可能解析为1。
案例3无效:您必须将所有案例从“0”写入“9”。
如果要将其最小化,请在以下情况下使用:
if (c == '+' || c == '-') {
// ...
} else if (c == '.') {
// ...
} else if ('0' <= c && c <= '9') { // or isdigit(c)
// ...
} else {
// invalid character
}
开关箱范围为gcc扩展
void foo(int ch)
{
switch(ch)
{
case 'A' ... 'Z':
case 'a' ... 'z':
printf("'%c' is a letter\n", ch);
break;
case '0' ... '9':
printf("'%c' is a digit\n", ch);
break;
case '+':
case '*':
case '-':
case '%':
case '/':
case '^':
printf("'%c' is a math operator\n", ch);
break;
default:
printf("'%c' is something else\n", ch);
break;
}
}
int main()
{
for(int x = 0; x < 50; x++)
{
foo(32+ rand() % 90);
}
}
开关箱范围为gcc扩展
void foo(int ch)
{
switch(ch)
{
case 'A' ... 'Z':
case 'a' ... 'z':
printf("'%c' is a letter\n", ch);
break;
case '0' ... '9':
printf("'%c' is a digit\n", ch);
break;
case '+':
case '*':
case '-':
case '%':
case '/':
case '^':
printf("'%c' is a math operator\n", ch);
break;
default:
printf("'%c' is something else\n", ch);
break;
}
}
int main()
{
for(int x = 0; x < 50; x++)
{
foo(32+ rand() % 90);
}
}
问题只是关于陈述案件的正确方式。
该代码需要采用c89标准
在标准C中,每种情况只有1个常量。在C89中不使用//注释
switch(carrier[i]) {
case `+`: /* Fall through */ /*Comment not required, but good style */
case `=`:
/* case 1 code here */
break;
case '.' :
if(deccase == closed) ...
break;
case '0' : /* Fall through */
case '1' : /* Fall through */
case '2' : /* Fall through */
case '3' : /* Fall through */
case '4' : /* Fall through */
case '5' : /* Fall through */
case '6' : /* Fall through */
case '7' : /* Fall through */
case '8' : /* Fall through */
case '9' :
/* case 3 */
...
break;
case ' ':
printf("staring with whitespace\n");
break;
default:
printf("empty\n");
break;
}
问题只是关于陈述案件的正确方式。
该代码需要采用c89标准
在标准C中,每种情况只有1个常量。在C89中不使用//注释
switch(carrier[i]) {
case `+`: /* Fall through */ /*Comment not required, but good style */
case `=`:
/* case 1 code here */
break;
case '.' :
if(deccase == closed) ...
break;
case '0' : /* Fall through */
case '1' : /* Fall through */
case '2' : /* Fall through */
case '3' : /* Fall through */
case '4' : /* Fall through */
case '5' : /* Fall through */
case '6' : /* Fall through */
case '7' : /* Fall through */
case '8' : /* Fall through */
case '9' :
/* case 3 */
...
break;
case ' ':
printf("staring with whitespace\n");
break;
default:
printf("empty\n");
break;
}
+| |-和“[0-9]”都无效。您需要分别检查每个值。这就是switch/case的工作原理。您可以使用case'+':case'-':带有单引号和重复的case。如果你想从零到九,你必须用大写字母“0”写出它:大写字母“1”:……:大写字母“9”:。在任何版本的C中都没有可用的速记。@JonathanLeffler GCC允许大小写范围:@qrdl OP的代码必须在c89标准中,并且GCC扩展不在c89或任何标准C中。+| |-和“[0-9]”都无效。您需要分别检查每个值。这就是switch/case的工作原理。您可以使用case'+':case'-':带有单引号和重复的case。如果你想从零到九,你必须用大写字母“0”写出它:大写字母“1”:……:大写字母“9”:。在任何版本的C中都没有可用的速记。@JonathanLeffler GCC允许大小写范围:@qrdl OP的代码需要在c89标准中,GCC扩展不在c89或任何标准C中。。。。由于开关盒范围是一个扩展,使用它们与OP使用符合C89标准的代码的要求不一致。。。。由于开关盒范围是一个扩展,使用它们与OP要求使用符合C89标准的代码不一致。