c语言输出入门 输出结果是多少 为什么?

C语言代码输出结果求分析:为什么x!=15的结果是1 ?
&div class=&highlight&&&pre&&code class=&language-text&& #include&stdio.h&
#include&stdlib.h&
void main(){
printf(&\n%d
%d &,x!=15,x=20,x&30);
system(&pause&);
&/code&&/pre&&/div&&br&输出结果是1,20,1
开始我以为是因为printf函数输出从右到左的原因,但是调换x!=15和x&30顺序后输出仍然一样。&br&x==15输出0.&br&求讲解这个输出结果。&br&&br&——————————————————————————————————&br&首先感谢大家,其次x=20不是误写(这是测试题),再是我使用的是vs2010。&br&&br&疑问是:看大家回答似乎不能在printf输出列表写判断语句是吗(不懂大家说的未定义行为是什么意思)?如果不是,为什么只要把&!=&换成其他如&=,&,&=,&都可以输出相对正确的判断值。但是当把x=20改成x==20,!=(不完全测试,成立的条件大概是别拿被赋值的数和x比较)在某些轻轻下又可以输出看似正确的值。&br&&br&还有一些测试结果,不过写的我自己感觉有些乱了。希望能讲解下深层次的原因,为什么这样或者为什么不这样。&br&&br&另外下面有朋友试过printf输出时从列表右边开始的,这个我记得好像也在那本书上看到过,但是看下面回答似乎大家否认这一点。这个怎解释?
#include&stdio.h&
#include&stdlib.h&
void main(){
printf("\n%d
%d ",x!=15,x=20,x&30);
system("pause");
输出结果是1,20,1
开始我以为是因为printf函数输出从右到左的原因,但是调换x!=15和x&30顺序后输出仍然一样。x==15输出0.求讲解这个输出结果。——————————————————————————————————首先感谢大家,其次x=20不是误写(这是测试题),再是我使用的是vs2010。疑问是:看大家回答似乎不能在printf输出列表写判断语句是吗(不懂大家说的未定义行为是什么意思)?如果不是,为什么只要把"!="换成其他如&=,&,&=,&都可以输出相对正确的判断值。但是当把x=20改成x==20,!=(不完全测试,成立的条件大概是别拿被赋值的数和x比较)在某些轻轻下又可以…
按投票排序
未定义行为不讲。
标准没有规定函数参数求值顺序这是未定义行为讨论未定义行为是无意义的void main,还有这种代码,把你的书扔了吧
唉,邀我了啊。。我送一句忠告:不要试图想当然的去脑补编译器的行为,尤其是初学者。
未定义行为。
从代码上看,你先是给x赋值为15,在printf 语句中又给x赋值为20,所以输出结果没错。其实,我猜你是想打 ‘x==20’ 吧?顺便问下,前来答题的各位到底是想到了什么领域,怎么我都搞不明白你们的答案?
这种问题有什么卵用?你自己恐怕都不知道代码要表达什么,而且明明代码是错的,非要问结果为什么那样,老谭的遗毒中得太深了吧?难道你将来准备用错误的、无厘头的代码编程?
什么代码,还带void main(),这种书别要了。。。这书的作者在脑补编译器行为。 C语言的“未定义行为”啊!!!C语言是遵从从ANSI C标准的,但在ANSI C标准里面,却没有对于你所遇到情况的处理顺序的规定,具体处理看编译器了, 一样的表达式,只不过编译器不一样,就得出了不同的结果。 还有,关于那个梗,Dr. Bjarne Stroustrup 说 The definition void main() { /* ... */ } is not and never has been C++, nor has it even been C.现行规范是 int main(int argc,char* argv){/*...*/}
确实是由实现定义的行为,这个和printf这个函数有关,不同环境下输出的结果不一样,毕竟c依赖底层实现。好了,正文开始,我们首先假设环境是微软win764位系统,然后用的IDE是VS2013(别的我没试过,逃)。来看这个未定义行为发生的地方,printf("\n%d %d %d ",x!=15,x=20,x(知乎不知为什么没有保存我的完整答案)
不要试图猜测函数参数调用的顺序。
已有帐号?
无法登录?
社交帐号登录C语言:编程求三个数中最大值。 为什么程序输出的总是第一个数? T_T好奇怪,初学C语言求帮助~_百度宝宝知道&div class=&highlight&&&pre&&code class=&language-text&& #include&stdio.h&
#include&stdlib.h&
void main(){
printf(&\n%d
%d &,x!=15,x=20,x&30);
system(&pause&);
&/code&&/pre&&/div&&br&输出结果是1,20,1
开始我以为是因为printf函数输出从右到左的原因,但是调换x!=15和x&30顺序后输出仍然一样。&br&x==15输出0.&br&求讲解这个输出结果。&br&&br&——————————————————————————————————&br&首先感谢大家,其次x=20不是误写(这是测试题),再是我使用的是vs2010。&br&&br&疑问是:看大家回答似乎不能在printf输出列表写判断语句是吗(不懂大家说的未定义行为是什么意思)?如果不是,为什么只要把&!=&换成其他如&=,&,&=,&都可以输出相对正确的判断值。但是当把x=20改成x==20,!=(不完全测试,成立的条件大概是别拿被赋值的数和x比较)在某些轻轻下又可以输出看似正确的值。&br&&br&还有一些测试结果,不过写的我自己感觉有些乱了。希望能讲解下深层次的原因,为什么这样或者为什么不这样。&br&&br&另外下面有朋友试过printf输出时从列表右边开始的,这个我记得好像也在那本书上看到过,但是看下面回答似乎大家否认这一点。这个怎解释?
#include&stdio.h&
#include&stdlib.h&
void main(){
printf("\n%d
%d ",x!=15,x=20,x&30);
system("pause");
输出结果是1,20,1
开始我以为是因为printf函数输出从右到左的原因,但是调换x!=15和x&30顺序后输出仍然一样。x==15输出0.求讲解这个输出结果。——————————————————————————————————首先感谢大家,其次x=20不是误写(这是测试题),再是我使用的是vs2010。疑问是:看大家回答似乎不能在printf输出列表写判断语句是吗(不懂大家说的未定义行为是什么意思)?如果不是,为什么只要把"!="换成其他如&=,&,&=,&都可以输出相对正确的判断值。但是当把x=20改成x==20,!=(不完全测试,成立的条件大概是别拿被赋值的数和x比较)在某些轻轻下又可以…
未定义行为。
未定义行为不讲。
未定义行为不讲。
标准没有规定函数参数求值顺序&br&&br&这是未定义行为&br&&br&讨论未定义行为是无意义的&br&&br&void main,还有这种代码,把你的书扔了吧
标准没有规定函数参数求值顺序这是未定义行为讨论未定义行为是无意义的void main,还有这种代码,把你的书扔了吧
已有帐号?
无法登录?
社交帐号登录
From C to Python

我要回帖

更多关于 c语言输出 的文章

 

随机推荐