《Linux C编程一站式学习》里的一道错误思考题,现在找不到错误根本原因
#include <stdio.h> int main(void) { int x = -1; if (x > 0); printf("is positive\n"); return 0; }
以上程序能编译过,执行也正常,但执行结果不正确,里面含语议错误,请分析下那里错了。还有,即然错了为什么能编译过呢?
这下面是我改过后的代码:
#include <stdio.h> int main(void) { int x; x == -1; if(x > 0) printf("is positive\n"); return 0; }
但是不管我x == -1或是x == 1,编译后执行的结果都是一样的,为什么?
==是判断,单=号才是赋值。
我是新手,在看书,能解释详细点吗,==是判断,单=号才是赋值这我能理解。
@星-Ian: 有啥疑惑?
#include <stdio.h> int main(void) { int x = -1; if (x > 0);//这个分号表示if语句结束了,所以下面的printf始终会输出! printf("is positive\n"); return 0; }
@幻天芒:
@幻天芒: 这个能理解,下面这个问题呢,没赋值,也是会打印,这是解错题,我想知道根本原因。
@星-Ian: 曾记否,C中,int默认值不是0,而是一个随机整数~
你应该找本大学教材《C语言设计》学习下基本语法。
正在学习中,参考了几本教材,《Linux C编程一站式学习》目前对我来说是最适合的。
另上面两个问题是解错题,我要知题错误的根本原因,这样我才能学的更深。
@星-Ian: 根本原因就是语法就是这么规定的。如果你要追究为什么语法要这么规定,建议你学习《编译原理》后去看下 C 的语法定义文档。
两个==是判断比较,一个=号才是赋值
x==-1 ;这条语句是判断x是否等于-1,并没有对x的进行赋值,x的值不变。并且你没有对x赋值,x的值时不确定的
首先源代码无论如何运行显示什么,最后返回值 都是0,至于你的代码请看楼上们的评论