gpt4 book ai didi

c - 如何比较 "text"(字符串)以用作 if 语句的条件

转载 作者:行者123 更新时间:2023-11-30 18:16:53 25 4
gpt4 key购买 nike

我想询问用户是否需要“经典模式”或“高级模式”,我将答案保存在变量中并尝试在 IF 语句中使用它,但它不起作用,让我例如显示我的代码的这一部分:

int mode;

printf("\n Pick the desired mode: ");
scanf("%i",&mode);

if(mode=="Classic"){
printf("It worked!");
system("pause");
}

if(mode=="Advanced"){
printf("It worked!");
system("pause");
}

问题结束后直接结束,返回值接近 20 亿...

我以为我收到了错误,因为 是变量内的一个值,然后我尝试使用字符串,但得到了相同的结果!

@编辑================================

好的,谢谢大家的帮助,你们在 StackOverflow 上的速度很快!

最后,这是使用strcmp以来最白痴的事情,易于理解且易于使用,修复了所有问题...我不知道这个,如果我之前知道的话,会节省很多时间!

最佳答案

字符串比较

C 中的字符串是使用指向字符序列(如数组)中第一个字符的指针来处理的,该字符序列以 \0 结尾,作为序列中的最后一个字符。比较它们需要使用比较函数,例如 strcmp,否则您将比较两个(几乎)总是不同的指针。

它们总是不同的,因为您“硬编码”的字符串是在应用程序代码中的某个位置定义的常量,而您从用户接收的字符串在接收时会进行 malloc 并放置在堆中的某个位置。

常量存储在一个内存位置,堆存储在其他地方。这两个指针永远不可能相同。

另一方面,按值比较两个字符串(比较字符串中的每个字符)是通过 strcmp 或更好的 strncmp 完成的,它会迭代数组中的字符并进行比较。

变量类型问题

您当前将 mode 变量定义为 int mode,它不能保存字符串值。

此外,当从 scanf 检索值时,您需要指定 %s,因为它检索的是字符串而不是整数。

当使用char *时,指针需要指向预先分配的一 block 内存(例如使用malloc)。

或者——整数比较

但是,您可以维护当前的结构,但定义一些常量,例如

static const CLASSIC_MODE = 1;
static const ADVANCED_MODE = 2;

用户需要根据显示的说明/选项列表输入 1 或 2。

那么比较将是:

if (mode == CLASSIC_MODE) {
/* classic mode */
}

关于c - 如何比较 "text"(字符串)以用作 if 语句的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32053234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com