星痕࿐ 2024-06-10 17:19 采纳率: 46.2%
浏览 1

为什么第12行和第19行要用双引号括起来CS和EIE而不是单引号呢?


#include<stdio.h>
#include<string.h> // 引入字符串处理函数库
 
int main(void) // 函数名应为 main
{
    int age;
    char zy[3], level; // zy 定义为字符数组,level 为单个字符
    scanf("%d", &age); // 去掉了 \n
    scanf("%2s", zy); // 读取至多两个字符,防止溢出
    scanf(" %c", &level); // 读取单个字符,前面加空格以忽略前面的换行符
 
    if(strcmp(zy, "CS") == 0) // 使用 strcmp 进行字符串比较
    {
        if(age <= 28)
            printf("YES");
        else
            printf("NO");
    }
    else if(strcmp(zy, "EIE") == 0) // 增加对 EIE 的判断
    {
        if(level == 'A' || age > 25)
            printf("YES");
        else
            printf("NO");
    }
    else
    {
        printf("NO"); // 如果专业不是 CS 或 EIE,直接输出 NO
    }
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-10 17:19
    关注

    引自免费微信小程序:皆我百晓生

    在C语言中,单引号('')和双引号("")有明确的区别。单引号用于定义字符常量,而双引号用于定义字符串常量。

    在这个特定的代码段中,"CS""EIE" 被用作字符串常量。这是因为 strcmp 函数接受两个字符串作为参数,并比较它们是否相等。如果strcmp的第一个或第二个参数是单个字符(例如,使用单引号),那么这将被解释为一个单字符的字符串,即一个包含结束符的单字符数组,这与预期的行为不符。

    具体来说:

    • 单引号如 'C' 表示的是一个字符常量,其值是一个整数,通常是 ASCII 码。
    • 双引号如 "C" 表示的是一个字符串常量,即使它只包含一个字符,它也会自动在末尾添加一个空终止符 '\0',因此在内存中看起来像是这样:C\0

    在你的代码中,strcmp(zy, "CS")strcmp(zy, "EIE") 都需要正确的字符串参数。由于 zy 是一个字符数组,它期望与另一个字符串进行比较,因此使用双引号定义 "CS""EIE" 是正确的做法,这样它们被视为字符串。

    以下是代码的关键部分,以再次确认这一点:

    if(strcmp(zy, "CS") == 0) {
        // ...
    } else if(strcmp(zy, "EIE") == 0) {
        // ...
    }
    

    这里,"CS""EIE" 都是字符串字面量,它们与 zy 中存储的字符串进行比较。如果 zy 恰好等于 "CS""EIE",则相应的条件分支将被执行。如果使用单引号,例如 'CS''EIE',这将导致编译错误,因为单引号只能包含单个字符。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月10日

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求