我正在尝试编写一个函数来检查输入是否为有效的double值。因为我最近了解了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)是第一种情况有效,还是我必须将其分为两个不同的情况
2)是否遇到案例3?我正在尝试使用一组数字。因此,如果char carrier [i]是数字,则匹配大小写。我知道isdigit()函数,但是我不想解决这个问题,除非switch case无法与set一起使用。
附加信息:-类型为char *的运营商ist,并已赋值-我正在使用gcc进行编译,无论该代码是什么,代码都必须符合c89标准。
对于您的问题,语法如下:
switch (expr) {
case '1':
printf("expr=1");
case '2':
printf("expr=2");
break;
case '3':
printf("expr=3");
break;
}
所以:
case '1': case '2':
。您的案例可能会编译,但无法给出预期的结果("+"||"-"
可能会解析为1)。如果要最小化,请使用if:
if (c == '+' || c == '-') {
// ...
} else if (c == '.') {
// ...
} else if ('0' <= c && c <= '9') { // or isdigit(c)
// ...
} else {
// invalid character
}
否,至少在您的意思是:"+" || "-"
的值为1,因为逻辑或运算符"+"
的至少一个操作数("-"
和||
)为非-零。
否,C switch
中没有字符串或正则表达式匹配,并且用单引号('
)表示的是多字节字符。
请注意,除非您中断,否则情况会持续到下一个,因此像这样的代码起作用:
case '+':
case '-':
(void) printf("+ or -\n");
break;
((请注意,'+'
和'-'
必须使用单引号使它们成为字符。您拥有的"+"
和"-"
是字符串,它们不等于字符,并且不能正确地比较)还是要与switch
匹配,请参见strcmp
。]
交换条件范围是gcc扩展名
void foo(int ch)
{
switch(ch)
{
case 'A' ... 'z':
printf("'%c' is a letter\n", ch);
break;
case '0' ... '9':
printf("'%c' is a digit\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);
}
}