switch的->写法
时间: 2024-11-05 13:27:34 浏览: 15
在编程中,特别是像C、C++、Java等语言中,`switch`语句是一种控制结构,用于根据给定的不同条件来执行不同的代码块。它的基本语法通常是这样的:
```c
switch(expression) {
case value1:
// 当expression等于value1时执行的代码
break;
case value2:
// 当expression等于value2时执行的代码
break;
// 可能还有其他case分支...
default:
// 如果expression都不匹配任何一个case,则执行这里的代码
break; // 或者可以省略break,因为默认分支之后通常需要结束switch
}
```
在这个结构里,`expression`会被计算一次,然后比较与每个`case`后面的值。如果匹配某个值,就会执行对应的代码块,直到遇到`break`语句跳出`switch`。如果没有找到匹配的`case`,那么会执行`default`分支(如果有)。注意,`break`关键字用于终止当前`case`后的执行,并跳出整个`switch`。
相关问题
解释下面的代码public String getDayOfWeek(int day) { return switch (day) { case 1 -> "Monday"; case 2 -> "Tuesday"; case 3 -> "Wednesday"; case 4 -> "Thursday"; case 5 -> "Friday"; case 6, 7 -> "Weekend"; default -> throw new IllegalArgumentException("Invalid day"); }; }
这段代码是一个使用了 JDK 17 中的 Pattern Matching for switch 功能的示例。它接受一个整数参数 day,根据不同的值返回对应的星期几名称。
在 JDK 17 中,可以使用箭头(->)语法来简化 switch 语句的书写。每个 case 标签后面都可以使用箭头将其与对应的结果关联起来。
在这个例子中,switch 语句根据 day 的值进行匹配。如果 day 的值是 1,则返回 "Monday";如果是 2,则返回 "Tuesday";以此类推。当 day 的值是 6 或 7 时,用逗号分隔的多个值表示它是周末,返回 "Weekend"。如果 day 的值不在1-7的范围内,则执行 default 分支,抛出一个 IllegalArgumentException 异常。
整个 switch 语句使用了表达式语法,并将匹配到的结果直接作为返回值返回。这种写法简洁明了,可以减少冗余的代码和括号。
#include<stdio.h> #define m 100 struct Mystack { char element[m]; int top; }; void push(struct Mystack *s,char x) /将x的值压入栈顶/ { s->element[s->top]=x; s->top++; } int IsEmpty(struct Mystack *s)//判断栈是否为空 { if(s->top==0) return 1; else return 0; } void pop(struct Mystack *s) /出栈操作,将栈顶元素删除/ { s->top--; } void Displaystack(struct Mystack *s)//显示从栈底到栈顶所有的元素 { int i; for(i=0;i<s->top;i++) printf("%c",s->element[i]); } void Clearstack(struct Mystack *s)//将栈清空 { s->top=0; } void main() { struct Mystack st; char ch; int i; for(i=0;i<100;i++) st.element[i]='\0'; st.top=0; printf("请输入一行字符:\n"); ch=getchar(); while(ch!=EOF && ch!='\n') { switch(ch) { case '#': if(!IsEmpty(&st)) pop(&st); break; case '@': Clearstack(&st); break; default: push(&st,ch); } ch=getchar(); } printf("有效字符为:\n"); Displaystack(&st); printf("\n"); }这段代码有什么问题
这段代码的问题在于`void main()`这个函数的声明方式已经过时了,正确的写法应该是`int main(void)`或`int main(int argc, char *argv[])`;另外,在`printf`函数中,应该使用转义字符`\n`来换行,而不是在字符串后面加上一个空的`printf`语句。修改后的代码如下:
```
#include <stdio.h>
#define m 100
struct Mystack {
char element[m];
int top;
};
void push(struct Mystack *s,char x) //将x的值压入栈顶
{
s->element[s->top]=x;
s->top++;
}
int IsEmpty(struct Mystack *s) //判断栈是否为空
{
if(s->top==0)
return 1;
else
return 0;
}
void pop(struct Mystack *s) //出栈操作,将栈顶元素删除
{
s->top--;
}
void Displaystack(struct Mystack *s) //显示从栈底到栈顶所有的元素
{
int i;
for(i=0;i<s->top;i++)
printf("%c",s->element[i]);
}
void Clearstack(struct Mystack *s) //将栈清空
{
s->top=0;
}
int main(void) {
struct Mystack st;
char ch;
int i;
for(i=0;i<100;i++)
st.element[i]='\0';
st.top=0;
printf("请输入一行字符:\n");
ch=getchar();
while(ch!=EOF && ch!='\n')
{
switch(ch)
{
case '#':
if(!IsEmpty(&st))
pop(&st);
break;
case '@':
Clearstack(&st);
break;
default:
push(&st,ch);
}
ch=getchar();
}
printf("有效字符为:\n");
Displaystack(&st);
printf("\n");
return 0;
}
```
此外,还可以添加输入字符长度的限制,以防止输入字符长度超出栈的容量而导致程序崩溃,例如可以在定义栈的结构体时增加一个`size`表示栈的容量,然后在`push`函数中加入如下代码:
```
if (s->top >= s->size) {
printf("栈已满!\n");
return;
}
```
在`main`函数中也需要修改为如下的形式:
```
struct Mystack st;
char ch;
int i;
st.size = m;
```
这样就可以避免因为输入字符长度过长而导致的程序崩溃问题。
阅读全文
相关推荐














