鱼C论坛

 找回密码
 立即注册
查看: 2769|回复: 18

[已解决]C语言中switch可以用文字判断嘛

[复制链接]
发表于 2019-6-28 15:02:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我这个是错误的,,       
printf("请输入您要查找的用户姓名:");
        char i;
        scanf("%s",&i);
        switch(i){
                case '张一':
                        z();
                        break;
                case '王二':
                        w();
                        break;
        }
最佳答案
2019-6-28 15:06:42
不允许这种写法。其次,在C中单引号值的是一个char类型的字符。不能是汉字,更不能是两个汉字了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-28 15:06:42 | 显示全部楼层    本楼为最佳答案   
不允许这种写法。其次,在C中单引号值的是一个char类型的字符。不能是汉字,更不能是两个汉字了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-28 15:11:03 | 显示全部楼层
newu 发表于 2019-6-28 15:06
不允许这种写法。其次,在C中单引号值的是一个char类型的字符。不能是汉字,更不能是两个汉字了。

所以switch不能用文字判断嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 15:16:15 | 显示全部楼层
zhangke 发表于 2019-6-28 15:11
所以switch不能用文字判断嘛


这要自己指定字符集才行吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-28 15:21:26 | 显示全部楼层
bin554385863 发表于 2019-6-28 15:16
这要自己指定字符集才行吧

我也不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 15:47:03 | 显示全部楼层
zhangke 发表于 2019-6-28 15:11
所以switch不能用文字判断嘛

不能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 15:58:58 | 显示全部楼层
在Java里面支持字符串,就可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 21:13:20 | 显示全部楼层
C++可以
//这个只是计算字符串hash的一个方法而已
constexpr const int Calc(const char *p)
{
        int i = 0;
        int hash = 0;
        while (*p)
        {
                
                hash =hash*1423+ (*p);
                p++;
                
        }
        return hash&0x7FFFFFFF;
}
int main()
{
        char buf[100] = { 0 };
        cin >> buf;
        switch (Calc(buf))
        {
        case Calc("hello"):
                cout << "hello";
                break;
        case Calc("gg"):
                cout << "gg";
                break;
        default:
                cout << "没有";
                break;
        }
 return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 11:55:08 | 显示全部楼层

所以这个最终比较的也是int型变量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 15:39:06 | 显示全部楼层
newu 发表于 2019-6-29 11:55
所以这个最终比较的也是int型变量。

不管比较的是什么,达到目的就行了 也就打多几个函数名字的功夫
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 15:39:42 | 显示全部楼层
newu 发表于 2019-6-29 11:55
所以这个最终比较的也是int型变量。

只不过C++才可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 15:53:01 | 显示全部楼层

注意楼主的题目是:swith可以用文字判断嘛

1 你的这种函数的方法C也可以
2 固然你的方法可行,但不符合楼主提问的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 18:27:58 | 显示全部楼层
newu 发表于 2019-6-29 15:53
注意楼主的题目是:swith可以用文字判断嘛

1 你的这种函数的方法C也可以

C没有C++里的constexpr,想知道怎么做到这种方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 18:42:51 | 显示全部楼层
迷雾少年 发表于 2019-6-29 18:27
C没有C++里的constexpr,想知道怎么做到这种方法。

constexpr本质上就是给编译器看的,也就是在编译阶段就确定了的东西,

那我在C中为什么不能写个宏提前把你的hash值算好呢?一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 18:54:32 | 显示全部楼层
newu 发表于 2019-6-29 18:42
constexpr本质上就是给编译器看的,也就是在编译阶段就确定了的东西,

那我在C中为什么不能写个宏提前 ...

求参考代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 19:26:20 | 显示全部楼层

代码我没有写,我是这样想的,既然c++的新特性都可以实现,那在C里面实现只不过比较麻烦而已。

我的几点猜想,
C++中的case后边是不是真的C中的Case呢,又或者只是个if...else
如果真的是C中的case的话,那么它这个表达式肯定是在编译阶段就算好的

所以说如果要在C中实现的话,用你的这种算字符串摘要的方法,也可以用if..else...if...else..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 19:29:00 | 显示全部楼层
newu 发表于 2019-6-29 19:26
代码我没有写,我是这样想的,既然c++的新特性都可以实现,那在C里面实现只不过比较麻烦而已。

我的几 ...


我试了 按你说的写个宏函数编译器期计算出hash值  编译器无法通过 甚至case ((int)2+(int)"0"):这样确定的常量都不行 我用C做不到我C++那样的函数的方法,所以想知道你怎么实现那种函数的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 19:38:29 | 显示全部楼层
迷雾少年 发表于 2019-6-29 19:29
我试了 按你说的写个宏函数编译器期计算出hash值  编译器无法通过 甚至case ((int)2+(int)"0"):这样确 ...

不写了,太累了

我上边说了我的想法,一种方式就是写宏定义查表,另一种放到if...else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 19:45:33 | 显示全部楼层
newu 发表于 2019-6-29 19:38
不写了,太累了

我上边说了我的想法,一种方式就是写宏定义查表,另一种放到if...else

if-else就不是主题了,有空的时候麻烦帮我写下我上面C++那种实现的C版本,想学习学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 23:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表