在数组上使用字符串的 Switch 语句

2023-11-26

#include<stdio.h>

int main(){

    char name[20];

    printf("enter a name ");
    scanf("%s",name);
    switch(name[20]){
        case "kevin" : 
        printf("hello");
        break;
    }
    printf("%s",name);
    getch();
}

看来是行不通了。这可能吗?我的意思是有什么方法可以制作字符串的 switch 语句。实际上如何解决这个问题呢?


C 中的 Switch 语句并不像其他语言(例如 Java 7 或 Go)中的那样智能,您不能切换字符串(也不能将字符串与==)。开关只能在积分型上操作(int, char, etc).

在您的代码中,您可以使用以下命令调用 switch:switch(name[20])。这意味着switch(*(name + 20))。换句话说,21号开关char名义上(因为name[0]是第一个)。作为name只有 20 个字符,您可以访问名称后面的任何内存。 (这可能会造成不可预测的事情)

还有字符串"kevin"被编译为char[N] (where N is strlen("kevin") + 1) 其中包含字符串。当你这样做时case "kevin"。仅当名称位于存储字符串的同一块内存中时,它才有效。所以即使我复制了kevin成名。它仍然不匹配,因为它存储在不同的内存中。

为了做你似乎正在尝试的事情,你会这样做:

#include <string.h>
...
    if (strcmp(name, "kevin") == 0) {
        ...
    }

字符串比较 (strcmp) 根据字符串的差异返回不同的值。例如:

int ord = strcmp(str1, str2);
if (ord < 0)  
    printf("str1 is before str2 alphabetically\n");
else if (ord == 0) 
    printf("str1 is the same as str2\n");
else if (ord > 0)  
    printf("str1 is after str2 alphabetically\n");

旁注:不要使用scanf("%s", name)以那种形式。它创建了一个常见的安全问题 use fgets像这样:(有一种安全的方法可以使用scanf too)

#define MAX_LEN 20
int main() { 
    char name[MAX_LEN]; 
    fgets(name, MAX_LEN, stdin);
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在数组上使用字符串的 Switch 语句 的相关文章

  • "/>

    Error 5 expected Css test css gt gt 我需要给吗 在这里 因为我的解决方案仍然无法正常工作 它开始给出一些其他错误 您需要添加一个等号 如下所示 Css test css gt gt 解释 块将整个语句或块
  • 使用MVVM Light的Messenger在视图模型之间传递值

    有人可以帮我解释一下 MVVM Light 的 Messenger 吗 我正在阅读 StackOverflow 上的一篇文章 MVVM 在视图模型之间传递值 https stackoverflow com questions 6392854
  • 字节序和大小为 1 的位域

    我认为字节顺序不应该影响大小最多为 1 个字节的结构 但这是我的小端机器上的代码 include
  • 拖动用户控件,但将其保留在 WPF 中其父级的边界内

    我有一个用户控件 正在将其拖动到网格内 Z Index 设置得相当高 这样我就可以将其保持在其他孩子之上 拖动控件效果很好 但如果用户想要将控件移到网格之外 它会允许这样做 How do I keep it from leaving the
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • if constexpr 与 sfinae

    随着引入if constexpr in c 17 通过使用编译时 SFINAE 解决了一些问题c 14 c 11现在可以使用解决if constexpr 具有更简单的语法 例如 考虑以下编译时递归的基本示例 以生成打印可变数量参数的子例程
  • 在 C# 中使用正则表达式重复模式

    我有一串话 词黑暗王辉光我们结束你好再见低翼 我需要找到第一个单词的最后一个字母与以下单词的第一个字母匹配的单词 例如 worD Dark 我写了一个正则表达式 b w w W 1 w b 目前它成功找到连续 2 个单词 Regex Mat
  • C - 具有可变数量参数和命令行参数的函数

    我需要排序n按字典顺序排列的作为参数数量可变的函数的参数的字符串数量 在main函数中 字符串被读取为命令行参数 这是我的代码 include
  • 什么更快?

    如果我们有以下 2 个 C 代码片段可以完成相同的任务 int a b somenumber while b gt 0 a b 3 b 3 or int b somenumber while b gt 0 int a b 3 b 3 我对计
  • 关于使用 Botframework v4 更改为新 LUIS 密钥的问题

    我在 Azure 中下载了 C 模板 它会自动创建并设置 LUIS 应用程序 但现在 LUIS 达到 1000 次调用并且现已过期 我使用创建了一个新密钥本指南 https learn microsoft com en us azure c
  • 如何使用 Dapper 从 .NET 7 执行 Postgresql 函数,而不列出所有参数的数据类型

    我正在尝试将我的 NET 5 Web API 代码传输到 NET 7 我有一个名为的单例服务DataManager它实现了接口IDataManager 其中一项功能是Execute还有其他 C 函数 称为 Get GerMany 以及 In
  • 使用Java在数组中查找子字符串索引

    我想使用 Java 从字符数组中返回用户输入子字符串的索引 该数组被初始化 打乱 然后进行搜索 我对此很陌生 尝试了两种不同的方法但没有成功 我在忽略什么 提前致谢 方法一 import java lang Math import java
  • cudaMalloc使用向量>进行管理 > C++ - NVIDIA CUDA

    我正在通过 NVIDIA GeForce GT 650M GPU 为我创建的模拟实现多线程 为了确保一切正常工作 我创建了一些辅助代码来测试一切是否正常 在某一时刻 我需要更新变量向量 它们都可以单独更新 这是它的要点 device int
  • 在 C# 中创建我的对称密钥

    一直在审查一些对称加密方法 我看到了很多在类中硬编码私有静态变量的示例 通常类似于 string key THISISYOURENCRYPTIONKEY 然后在更远的地方 代码使用它来加密 解密 抛开正确的实现 算法 策略以及存储它的位置
  • 关于捕获异常的良好实践

    我正在用 C 11 编写一个小程序 并且第一次真正使用异常 我有一个关于如何有效捕获异常的问题 经过一番谷歌搜索后我仍然没有答案 这是问题 通过 const 左值引用捕获异常还是通过 const 右值引用捕获异常 哪个更有效 或推荐 在代码
  • static_assert 有什么作用,你会用它做什么?

    你能举个例子吗static assert C 11 会优雅地解决手头的问题吗 我熟悉运行时assert 我应该选择什么时候static assert 超过常规assert 另外 在boost有一种东西叫做BOOST STATIC ASSER
  • 如何反转无符号整数的 4 个字节? [复制]

    这个问题在这里已经有答案了 我试图通过使用 和 以及按位 AND 和 OR 和 来反转无符号整数 但不知道如何执行此操作 我已经拥有的 int main int argc char argv unsigned int getal scanf
  • 我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

    我们有一个可自定义颜色的应用程序 这使得列表视图中所选项目的橙色 Android 默认值有时看起来很糟糕 我们想要更改列表视图所选项目的颜色 我知道如何在我们页面的后台代码 xaml cs 中执行此操作 并且我知道您可以在 styles x
  • 使用表达式参数专门化模板

    我有一堂这样的课 template
  • 为什么我们从 MultiByte 转换为 WideChar?

    我习惯于处理 ASCII 字符串 但现在使用 UNICODE 我对一些术语感到非常困惑 什么是多字节字符以及什么是widechar有什么不同 多字节是指在内存中包含多个字节的字符吗 widechar只是一个数据类型来表示吗 为什么我们要从M

随机推荐