我创建一个简单的菜单与开关的情况下,所以根据写的值,它可以做不同的事情,
void
menu_principal()
{
int opciones;
printf ("Ingrese su eleccion \n");
scanf("%d", &opciones);
switch(opciones)
{
case 1:
int coord_x;
int coord_y;
printf("Ingrese las cordenadas de x \n: ");
scanf( "%d", &coord_x);
printf("Ingrese las cordenadas de y \n");
scanf( "%d", &coord_y );
break;
case 0:
break;
…
}
return 0;
}
但它就是不工作,我得到的错误与scanf
和int coord_x
,coord_y
。
1条答案
按热度按时间ia2d9nvy1#
C23之前
在C23之前,你不能在像
int coord_x;
这样的声明之前放一个标签。你可以标记一个块-在
int coord_x;
之前添加{
,在break;
之前添加}
(在它也可以工作之后)。C11 §6.8.1带标签的语句表明标签后面必须有语句。§6.8声明显示了什么构成声明; §6.8.2复合语句表明声明与语句不同,6.7声明涵盖了声明的组成部分。
标签必须位于语句之前,但它可以是空语句--在
;
上只是一个空值。这意味着你不能在复合语句的右括号之前直接放置标签;你必须在它后面加上一个引号,才能成为带标签的语句。C23及更高版本
C23解除了不能标记变量声明的约束。(新)附件M.2中的摘要指出:
它通过细化语法来实现这一点:
语义部分说:
复合语句中的任何语句或声明前面都可以有一个前缀,该前缀将标识符声明为标签名称。可选的属性说明符序列与标签相关。标签本身不会改变控制流,控制流在标签之间畅通无阻地继续。
因此,在C23中,标签可以出现在声明之前,或者直接出现在复合语句的右括号之前。
“optional attribute specifier”主要是
[[maybe_unused]]
,这表明它所附加的标签可能不会被使用。建议编译器不要就使用或不使用该属性标记的标签给出给予警告。