关于LinuxC编程

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
icngor
帖子: 7
注册时间: 2012-08-15 11:05

关于LinuxC编程

#1

帖子 icngor » 2014-12-11 9:34

在一站式C编程中发现一个题
1、以下程序段编译能通过,执行也不出错,但是执行结果不正确(根据第 3 节 “程序的调试”的定义,这是一个语义错误),请分析一下哪里错了。还有,既然错了为什么编译能通过呢?
int x = -1;
if (x > 0);
printf("x is positive.\n");

我觉得是分号的问题;但是没搞清楚他问的问题什么意思
drongh
帖子: 1038
注册时间: 2007-01-10 9:32

Re: 关于LinuxC编程

#2

帖子 drongh » 2014-12-11 9:43

if 语句后面的分号去掉。
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 关于LinuxC编程

#3

帖子 susbarbatus » 2014-12-11 10:54

问题就是为什么能编译能通过,执行也不出错,但是执行结果不正确啊。
所谓语义错误也就是说,语法上这个程序是对的,但表达的并非是程序员想要的意思。
这个问题就是让你解释两点:
1. 语法为什么没错
2. 这段代码实际上执行了什么样的逻辑
沉迷将棋中……
drongh
帖子: 1038
注册时间: 2007-01-10 9:32

Re: 关于LinuxC编程

#4

帖子 drongh » 2014-12-11 15:53

加个逗号,表示空语句。语法是对的。比如可以这样写。

代码: 全选

if (x > 0)
    ;
上面的if条件,只做判断没做任何动作,下面的for也是。for语句有时会用到空循环,if基本用不到。

for语句也可以这样写的。

代码: 全选

for (x = 0; x < 10; x++)
    ;
这些逗号就是一条语句,空语句。没有任何动作。可以写在“)”后面,但容易搞错,空循环一般另起一行写。
JGS
帖子: 13
注册时间: 2013-06-02 15:44
系统: ubuntu12.04 lst

Re: 关于LinuxC编程

#5

帖子 JGS » 2014-12-14 10:19

int x = -1;
if (x > 0);
printf("x is positive.\n");

其中第一行未定义一个整型的变量。
第二行是条件判断语句,但是if判断完后为空处理。因为有分号的原因。
第三行为打印语句,恒输出"x is positive.”

我估计原意是判断后再根据判断结果打印。
应为
if (x > 0)
printf("x is positive.\n");
回复