(这里是极端菜鸟)为啥这个 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 代码不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 findmany() 在这里不起作用 - Lumen/Laravel?
这里有啥问题,为啥 innerHTML 不起作用? [关闭]