C语言++符号的问题!vc++6.0和Dev-C++运行结果不一致!

#include<stdio.h>
int main(void)
{
int num=1;
while(num++<=2)
printf("%d",num);
getchar();
return 0;

VC里边是34,Dev-C里边是23。
我主要想知道那个++,出循环之后还加不加1了?++是判断条件,那它到底是不是属于循环的呢?!!!
to arongustc:
不好意思说错了,C primer plus里面关于后缀++的解释得到的也应该是3

原文: while(shoes++<18.5)这个表达式将达到19,因为shoe将在比较之后而不是之前增加
只到19。。。

自增符 i++
你的程序里,while里面的表达式可以用括号写出来,更明确一点。
while((num++)<=2)
注意:这里的num是变量。当num自增之后,值会发生变化。也就是说num++的值会发生变化。
标准C里面的这样的。
int num=1;
num++;//相当于num=num+1;
也就是说,运算之前的值num是1.运算之后的num值是2.
所以num++也是一个变量,所以你的问题也很明确了。一个变量的值和2做比较。显然是一个判断表达式。
至于不同编译器中为什么结果不同,具体情况是这样的,由于自增符在不同的编译器中是不同的表现方式。但是通用的编译器,还是按照++符号和变量的位置来判断的。(需要在熟悉编译器的情况下或者在汇编中查看代码。使用debug模式。)
下面说通常情况
例如
int i=0;时
++i和i++。的情况分别是:
++i 这时候,++在i的左边,就先自增,在赋值。也就是说。运算之前i的值是1,赋值之后的值是1.
i++ 则不同,++在i的右边,则先赋值,再自增。也就是说。运算之前i的值是0,赋值之后的值是1.
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-09
后缀++,也就是postfix ++,表达式的值就是num的值,但是num会++。
++当然属于循环,因为是出现while的条件表达式中,而条件表达式会在每次循环时求值,直到false为止。这里很显然,Dev-C++的输出是正确的。

VC6相对来说比较老,对标准的支持不是很好,建议使用vc2003以上的版本。

在vc2010中,得出与Dev-C中相同的结果。

楼主可以参考c++标准的文档中的6.5和6.4。追问

嗯,C primer plus里面关于后缀++的解释得到的也应该是3

原文: while(shoes++<18.5)这个表达式将达到19,因为shoe将在比较之后而不是之前增加
只到19。。。

那C等级考试用的什么标准?笔试也是和VC++6.0标准一样吗?那岂不是答案有歧义?

追答

等级考试的我就不清楚了,如果考试用vc6来验证结果,那我只能说遗憾。不用太在意这种考试的结果,因为没多大意义,只要自己心里明白就行。

第2个回答  2012-10-09
找到这个问题的答案,还不如不写这种带歧异的表达式,估计这个根本在标准里没有定义追问

这是我们老师上课举例的一个问题,他给的答案是num最后是4,C primer plus里面关于后缀++的解释得到的也应该是4,而且里面并没有说这是不明确的定义,只有一个表达式里面有两个++才可能导致不同环境或编译器的差别把,比如y=n++ + n++;

现在我的问题就是到底怎么解释这个差异?两个编译器运行结果不一样?虽然我觉得前者应该是对的

追答

问题是它不一定解释得清楚,如果标准没有规定,它得值完全依赖编译器,根本没有道理可讲

本回答被网友采纳
第3个回答  2012-10-09
百度一下 傻蛋

VC++6.0和Dec_C++、VS2019输出结果不一样的原因是什么?
一定要记住,同级别的运算符一定要加括号:否则运算顺序是由编译器决定。

为什么在VC++6.0 里能运行的程序到 Dev C++ 里却出现许多warnings ?_百 ...
这两个软件用的C语言编译器不一样,具体注意几点:DEV C++里的main函数返回值要是int型的,而且在main函数的最后要加上return 0;再就是使屏幕停留的语句system(“pause”);注意这几点就行了

为什么代码在dev-c++运行于vc6.0运行会有不同结果?
不同的编译器对标准C++的支持不同,都有自己的特性,所以不要写这种把i++作为函数参数的程序:)

c++运算符重载问题,vc6.0可通过,dev c++出问题
cout << "a == c? " << (a==c) << endl;}

求高人解答:同一段程序在vc++ 6.0与turbo c运行结果不同的问题
造成这种结果 是 C语言在 ++j 定义上 的不严密性 造成的。q=(++j)+(++j)+(++j); 这同编译器编译时 的优化处理方式有关。VC++ 编译 时, 若编译选项 选用 优化 \/O1 或 优化 \/O2 ,结果 为 24 \/O1 minimize space 省空间优化 \/O2 maximize speed 使运算速度最快优化 默认结果为...

这个程序错在那里,在VC6.0和DEV C++里都显示不正确,谢谢
row = 0; row < 3; ++row)for ( column = 0; column < 5; ++column )matrix[row][column] *= scalar;} 有什么不同?发现了吗?两者的函数名不一样的,实现语句里的scalarMultipley多了个字母e了,把它去掉就ok了。我可是在电脑上试过了,确实解决了你的问题了的,记得给我加分哦。

...初学C语言 使用DEVC++做 可是跟之前用过的VC++6.0的调试不同 怎么调...
你for语句后有一个分号,删掉它试试

DEV C++和VC++编译C语言的区别
还有一点就是,通常如果是在VC++下编写的代码,不是很规范,拿到DEV C++上会报错。而反过来则可以运行。这里涉及到GCC的问题,它对标准的支持表现在不支持非标准的东西,但是 DEV C++有个最大的好处就是体积小,没有VC++这么大,可以装到U盘里。2、Dev-C++是一个C&C++开发工具,它是一款自由软件...

devc++与vc++有什么不同,为什么我在devc++中能运行的程序却不能再vc里...
DEV-C++用的是GCC编译器,对C\/C++标准的支持均比VC++6.0要好很多,而VC++6.0有很多自己规定的语法,如果不符合它的规定,就会报错。

DEV-CPP和Visual C++ 6.0相比
Dev-C++最贴近C++标准,支持单文件编译,采用GCC编译器,在Windows环境下可能没有Cl(微软的编译器)快。比较适合初学者。功能没有VC强大,但是体积小,轻便。Visual C++ 6.0中国很多人都在用它。但我觉得VC6在今天来看简直就是个垃圾,比如for循环定义的变量的作用域在整个函数。我还是建议使用高版本的...

相似回答