1. 用DEV编译器编译后,为什么循环报错啊,求解答
for循环基本格式如下:
for ( e1 ; e2 ; e3 ) //这里括号中的分号,至少要有两个,你程序问题就出在这里
{
}
括号中的e1,e2,e3表达式都可以不输入(根据程序情况确定), 如:for( ; ; ) 表示一个for死循环
e1是初始化,只执行一次
e2是判断结束条件,当e2为真时,循环,为假则跳出循环
e3是循环变量变化区,每循环一次都会执行一次这里的操作。
另:
1、你的printf("%d", n );写到了continue;之后,而且在同一个{}中,这样,你的程序运行起来就会是什么显示都没有!
2、devC++不会自动暂停输出显示,为了看清楚屏幕输出结果,请在return 0;之前加一个:system("pause"); //暂停一下
2. 如何防止因编译器开启优化,而导致程序执行错误
我的经验是:未优化的c程序可正常运行,优化后不能运行,那一定是我的程序有问题。我还没经历过不是我程序的情况。
发现这种不易发现的问题,需要看汇编码。
避免的方法,我的经验:写c程序,尽量规矩;似是而非的概念,一定要搞清楚,别侥幸。因为侥幸而留的雷,现在不出问题,将来一定会出问题;不优化不出问题,优化就出问题。
最后要说,每个应用程序,都让他开优化运行,只要时间允许,一定要查出开优化后出问题的原因。时间不允许,只能不开优化凑合着,在有时间的时候继续查问题。
3. 为什么程序会无限循环
EOF 其实是一个宏,在预编译期间会被编译器用 -1 代替
也就是说,当scanf 的返回值是 -1 时就会跳出循环。
scanf 的返回值是前 N 个成功度取得数据的数量,简单点说就是成功读了多少个数据,不过有区别,如果你第一个输入数据非法的话,就算你后面是合法输入,也会返回 0 。
EOF 是 end of file 的意思,也就是文件尾。如果是读文件的话,读到文件尾就会结束循环。
如果使用键盘输入的话, 输入 Ctrl + z 就可以结束循环(貌似是模拟文件结束符还是什么的,我也不太清楚),不过我所说的是在windows 环境下,如果是其他操作系统就另当别论了。
印象中,以前在网络 scanf()=EOF 看到过一篇文章就是这么讲的
4. C#的问题 我感觉是编译器优化的时候优化出问题来了
第1段代码,当循环到 i=len-2 时,进行 if 段,这时在 if 段内要求: i++,那么这时候 i=len-1 了。然后进入下一轮循环,这时因为 i==len-1 就进入 else 部份了。
第2段代码,同样,当循环到 i=len-2 时,同样在 if 段内 i++ 造成 i=len-1,这时再往下走,走到
if(i==len-1) ,判断就为true,就break了。
5. 在不考虑编译器优化等因素下,下面那个运算比较快
下面是在编译器不优化的情况下的代码反汇编后的结果
14: if (a > b)//我们看到,只有3条指令,
0040104D mov edx,dword ptr [ebp-4] //将a放入寄存器EDX
00401050 cmp edx,dword ptr [ebp-8] //比较EDX和b的大小
00401053 jle main+3Ch (0040105c) //如果a<b跳转到0040105c
15: {
16: return 1;
00401055 mov eax,1
0040105A jmp main+4Fh (0040106f)
17: }
18: if (a - b > 0)//我们看到有4条指令
0040105C mov eax,dword ptr [ebp-4]//将a放入EAX
0040105F sub eax,dword ptr [ebp-8]//a-b的差放入EAX
00401062 test eax,eax//比较EAX是否为0
00401064 jle main+4Dh (0040106d)//条件跳转
19: {
20: return 2;
00401066 mov eax,2
0040106B jmp main+4Fh (0040106f)
21: }
所以我认为if (a > b) {....}
效率更高
6. C语言中,如果编译的程序是无限循环的,系统会如何处理
一直运行啊,如下:
main()
{
int i=1 ;
while(i>0)
printf("死循环\n");
}
就是一直运行,CPU应付这点点循环还搓搓有余。。。
不过有的会报错,
7. 多面体模型是编译器循环优化的未来吗
我们可以依赖现代编译器的优化技术而不是使用语言特性...编译/链接/调试 的开发模型将会被继承下来,但是把 ...‘;’的)循环体 赋值语句不会返回布尔类型的结果 ...
8. java编译器对于循环进行了真正的编译优化吗
不能用完全解释语言过程来理解Java,v.size()在循环中并没有被调用10000次,因为,编译的循环优化会对其进行优化。
9. java这段代码通过编译,但无限循环
for(intj=1;j<=i;i++){
System.out.print("*");
}
能不无限循环么,你的j始终比i小
10. 嵌入式C常见三种无限循环的区别
我是刚刚上大学才学的编程,根据我的理解,我觉得for和while很好区别,for就是单一的循环,而while要根据括号里的条件判定,才会进行循环。对于while和do while的区别,我觉得应该是while要先判断是否满足条件,才会执行后面的代码,而do while要先执行do里面的东西,再进行判定。