(这里是极端菜鸟)为啥这个 C 代码不起作用?

Posted

技术标签:

【中文标题】(这里是极端菜鸟)为啥这个 C 代码不起作用?【英文标题】:(Extreme Noob here) Why wont this C code work?(这里是极端菜鸟)为什么这个 C 代码不起作用? 【发布时间】:2013-05-29 02:00:56 【问题描述】:

为什么这不起作用,我对编程很陌生,但我似乎无法弄清楚为什么这不能正常工作。

#include <stdio.h>
#include <math.h>

int main()
    int num1;
    printf("Enter 1, 2, 3.");
    scanf("%d", &num1);
    if(num1 = 1)
        printf("You entered one");
    else if(num1 = 2)
        printf("You entered two");
    else if(num1 = 3)
        printf("You entered three");
    else
        printf("Invalid");

【问题讨论】:

如果您使用gcc 编译,我建议您包含标志-Wall-Wextra 以避免将来出现此类问题。 不能如何?始终包含您的期望您所看到的,以及您认为这令人惊讶的原因 if (2 == x) 你不会再犯同样的错误... :) @effeffe:或者开启警告,以合理的、非尤达的方式制定条件。 感谢开始学习 C 编程! 【参考方案1】:

在 C 中,在条件(if 语句)中使用赋值 (int x = 5) 是有效的。

例如:

int x = 0;

if (x = 5)



如果赋值可以完成并且值 != 0,这将评估为真(它返回 5 到“if”和all non zero terms are true by convention)。在这种情况下,它可以完成并返回 5。

您可能正在寻找这个:

int x = 0;

if (x == 5)



这将评估为假 (0)。

请记住:您使用单个等号“=”来表示“分配”。使用双等号“==”表示“比较”。

【讨论】:

使用双等号“==”表示比较 更好的表达方式。更新了:) 请注意,赋值将返回 5,而不是 1——就 if 语句而言,它仍然评估为真,但它不是“真”。 那只是盲目的错误。哈哈哈。固定的。我的意思是再次说“评估”。我只是匆忙和粗心。【参考方案2】:

把所有的=替换成==应该没问题(因为=是用来赋值的,而==是用来测试是否相等的,这似乎是你想做的)

【讨论】:

我很惊讶 OP 编译器没有为此发出警告。 @MartinJames OP 倾向于在没有警告的情况下使用编译器 :) 哦,是的,哇,真不敢相信我忘记了,谢谢。 :) 这可能违反了 SO 规则但是......嗨@Elazar :) @user2446045 添加-Wall -Wextra 以打开编译器警告【参考方案3】:

在 C 中,与其他许多编程语言一样,= 运算符表示“赋值”。当你做a = 3时,意思是“用3赋值a”,这当然是成功并返回true的东西,这就是为什么你的程序总是会进入第一个分支。

您需要做的是使用“相等测试”运算符 ==,以便当且仅当变量 a 所持有的值为 3 时 a == 3 才返回 true。 p>

【讨论】:

【参考方案4】:

您的代码有一个错误,您使用 = 而不是 ==,在 C 中 = 运算符表示赋值运算符,而 == 运算符用于比较。

要清除您对运营商的疑虑,请阅读此链接 http://www.tutorialspoint.com/cprogramming/c_operators.htm

【讨论】:

【参考方案5】:

因为你从 int main() 开始只是出于编译器的原因 put return 0;在程序结束时更正确。

【讨论】:

从 C99 开始,return 0; 是隐含的,如果我们想要正确,签名应该是 int main(void)【参考方案6】:

它不起作用,因为您需要将= 符号更改为==。有时在声明 int 或 char 时使用等号。 == 的意思是等于,当你没有声明整数和字符时,你想使用它。而!= 的意思是不等于。你还应该把 return 0;在程序结束时。

【讨论】:

以上是关于(这里是极端菜鸟)为啥这个 C 代码不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个显式 P/Invoke 不起作用?

为啥这个按钮约束设计不起作用?

为啥 findmany() 在这里不起作用 - Lumen/Laravel?

这里有啥问题,为啥 innerHTML 不起作用? [关闭]

为啥这个 CSS3 动画在 MS Edge 或 IE11 中不起作用?

为啥这个 SwiftUI Picker 代码不起作用?