Почему 5/7 печатает 0?

Я только начал изучать C и узнал, что знак / является оператором деления. Я экспериментировал и задавался вопросом, почему 5/7 printf число 0.

Вот моя программа:

#include<stdio.h>

main()
{
    int n;
    n = 5/7;
    printf("%d", n);
}

Спасибо!


person Adam Sniths III    schedule 22.07.2013    source источник
comment
потому что его вывод - только целое число 5/7 = 0.71.. = целая часть 0. C (и многие языки программирования) работает таким образом. вам также необходимо изучить float тип данных.   -  person Grijesh Chauhan    schedule 22.07.2013
comment
Вы указали n как целое число. 5/7 не является целым числом.   -  person    schedule 22.07.2013
comment
/ выполняет целочисленное деление.   -  person miku    schedule 22.07.2013
comment
Возможно, вас заинтересуют более общие ресурсы по C, и сначала прочтите их. В FAQ по C описана ваша проблема: c-faq.com/expr/truncation1.html   -  person Jens Gustedt    schedule 22.07.2013
comment
Возможный дубликат Почему это деление дает ноль?   -  person phuclv    schedule 04.06.2016
comment
здесь так много дубликатов. Как вы ожидаете, что 5/7 будет сохранено в int? n не может хранить такие значения, как 0,714285 ...   -  person phuclv    schedule 04.06.2016


Ответы (2)


Это из-за целочисленного деления. 5/7 составляет 0.71.., а целая часть этого числа равна 0, поэтому печатается 0. Чтобы решить эту проблему, используйте переменные типа float (или двойного типа), а также константы, например попробуйте:

float f = 5.0 / 7.0;

распечатать переменную f со строкой формата %f

person C_Intermediate_Learner    schedule 22.07.2013
comment
Большое тебе спасибо :) :) - person Adam Sniths III; 22.07.2013
comment
Как хороший ответ для начинающих, попробуйте написать полный ответ. обратите внимание на ответ @Daniel Daranas ниже. а также то, что я добавил - person Grijesh Chauhan; 22.07.2013
comment
Нет, мой комментарий к @C_Beginner_Learner - person Grijesh Chauhan; 22.07.2013
comment
@C_Beginner_Learner, будучи другом, я редактирую для вас (для OP я публикую комментарий, обратите внимание!), Чтобы вы могли знать how to complete an answer? (ваш ответ был немного неполным) --- также как форматировать, скоро просмотрите это: Справочный центр - person Grijesh Chauhan; 22.07.2013

Потому что это 0.

5/7 - целочисленное деление, потому что и 5, и 7 являются целыми числами. Результат целочисленного деления 5/7 равен 0.

n, переменная, которой вы присваиваете результат, также является int.

Если бы вы написали 5.0/7.0, у вас было бы деление с плавающей запятой. Однако, поскольку вы присваиваете результат n, который, опять же, int, его значение также будет 0. Конечно, если вы присвоите результат 5.0/7.0 переменной double, вы получите в нем десятичные дроби.

person Daniel Daranas    schedule 22.07.2013
comment
Нет необходимости явно приводить две стороны, вы можете приводить только одну сторону, другая будет неявно приведена. - person Maroun; 22.07.2013
comment
@MarounMaroun В этом нет необходимости, но я не люблю использовать неявное приведение типов. - person Daniel Daranas; 22.07.2013