我有这个片段:
#include <stdio.h>
#include<conio.h>
void main() {
int x = 10/0;
printf("%d", x);
getch();
}
以上输出为10
。
但如果我这样做:
#include<stdio.h>
#include<conio.h>
void main() {
int x = 10/2;
printf("%d", x);
getch();
}
输出为5
。
为什么呢?
我正在使用TurboC++
Windows 7
使用DosBox
编译器。
另外,如果我这样做:
#include<stdio.h>
#include<conio.h>
void main(){
int x=10;
x=x/0; //now it would not compile and gives error
}
答案 0 :(得分:4)
10/0打印10
除以零是Undefined Behaviour(*)。任何事情都可能发生。如果你很幸运,电脑会打印一些非常意想不到的东西,迫使你纠正编程错误;如果你运气不好,很长一段时间都不会注意到这个错误。
10/2打印5
这是对的。 10
除以2
为5
。
(*)C99 Standard说:
6.5.5 / 5
...
...如果第二个操作数的值为零,则行为未定义。
答案 1 :(得分:3)
除以零是未定义的行为,因此允许任何结果 - 它可能会崩溃或编译器可能拒绝编译该代码(Visual C ++ 10会这样做)。将10乘以5得到2,正如您通常所期望的那样。
答案 2 :(得分:2)
因为在基本算术10/2=5
。