Присвоение значения по-разному - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть этот фрагмент:

#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
}

Ответы [ 3 ]

4 голосов
/ 20 сентября 2011

10/0 отпечатков 10

Деление на ноль равно Неопределенное поведение (*). Все может случиться. Если вам повезет, компьютер напечатает что-то очень неожиданное, заставляя вас исправить ошибку программирования; если вам не повезло, ошибка останется незамеченной в течение длительного времени.

10/2 отпечатка 5

Это правильно. 10, деленное на 2, равно 5.

(*) Стандарт C99 гласит:

6.5.5 / 5
...
... если значение второго операнда равно нулю, поведение не определено.

3 голосов
/ 20 сентября 2011

Деление на ноль - это неопределенное поведение, поэтому любой результат разрешен - он может потерпеть крах или компилятор может отказаться от компиляции этого кода (Visual C ++ 10 делает это). Разделив 10 на 5, вы получите 2, как обычно и ожидаете.

2 голосов
/ 20 сентября 2011

Потому что в базовой арифметике 10/2=5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...