2011-09-28 445 views
1
void main() 
{ 
    char name[20]; 

    printf("\n enter Your Name: "); 
    gets(name); 

    switch(name) 
    { 
    default : printf("Invalid"); 
    } 

    getch(); 
} 

所以我的问题:是一个字符数组或有简单的数组在表达式中的开关,如果它是有效的,那么情况值是什么?可以使用字符数组作为switch语句的表达式吗?

+2

请注意,您可以[将行格式化为代码](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)缩进四个空格。编辑器工具栏中的“{}”按钮可以为您做到这一点。编辑你的问题并尝试一下。单击编辑器工具栏中的橙色问号以获取更多信息和格式化提示。 – outis

回答

4

switch语句正在使用字符数组的地址作为参数。所以不,它不会像你期望的那样工作。

它遵循相同的原因,您为什么不能将字符串放入开关并期望其工作。 (和字符串比较相同)

1

恐怕不是。要比较字符串/字符数组,你必须使用其他一些函数,比如'strcmp'。 如果您确实想使用开关结构,则可以将每个字符串映射到不同的整数并切换。这是一个DEMO

0

如果您询问其有效性,那么它是有效的,编译器会很乐意编译。但是,编译器不会比较内容(字符串中的字符),而是会比较指针值。

+1

-1,这是无效的。 –

+0

我真的不知道标准,但至少小小的C可以编译它FYI – LeleDumbo

+0

那么,这是tc的延伸。我想知道这应该如何为他们工作,因为通过标准,案件也必须是不变的表达。 'gcc'不会编译这个代码,并且会提供一个关于'switch'条件的精确错误消息,'clang'甚至会在代码中发现其他错误。 –

2

不,你不能。您将需要创建一个字符数组(字符串)的数组。搜索他们转换为和整数(索引到该数组)并使用它。

4

没有,标准说

switch语句的控制表达式应具有整数 类型。

在你的情况下,将采取字符串的地址,而不是在这方面的整数。

相关问题