Неправильное вычисление

#c

#c

Вопрос:

Итак, ребята, я новичок в программировании и языке C, просто изучаю его для удовольствия 🙂 Итак, Currnt вычисляется совершенно правильно, он может вычислить 4/2, но когда я пытаюсь 6/15, он просто отвечает 0, есть идеи, почему?

     #include <stdio.h>
    int main () {

    int Volt,Resst;
    float Currnt;

    printf("Enter the value of resistor:");
    scanf("%d",amp;Resst);
    printf("Enter the voltage of power supply:");
    scanf("%d",amp;Volt);
    if (Volt > 10)
    printf("The voltage is too bign");
    else if (0 > Volt)
    printf("Not a valid inputn");
    else {
    Currnt=Volt/Resst;
    printf("The current is %.2f An",Currnt);
    }

    }
  

Комментарии:

1. Лучше, если вы разместите там свой код, а не просто разместите его изображение.

Ответ №1:

Если блок инструкций if / else содержит более 1 команды (например, ваша последняя ветвь else), вам необходимо использовать фигурные скобки:

 if (Volt > 10)
    printf("The voltage is too big");
else if (0 > Volt)
    printf("Not a valid input");
else {
    Current=Volt/Rest;
    printf("...");
}
  

Чтобы избежать подобных ошибок, рекомендуется всегда использовать фигурные скобки, даже если в блоке только одна команда:

 if (Volt > 10) {
    printf("The voltage is too big");
}
else if (0 > Volt) {
    printf("Not a valid input");
}
else {
    Current=Volt/Rest;
    printf("...");
}
  

Обновить

В C / C тип результата выражения (в вашем случае деления) зависит исключительно от типа переменных в нем. В вашем случае выражение есть int / int , поэтому будет учитываться результат int — тип переменной, в которой вы ее храните, не имеет значения. Решение состоит в явном приведении хотя бы одной из переменных выражения к float :

 Currnt = (float)Volt/Resst;
  

или

 Currnt = Volt/(float)Resst;
  

или

 Currnt = (float)Volt/(float)Resst;
  

Комментарии:

1. Эй, чувак, извини, что снова беспокою тебя, но у меня еще одна проблема, и мне нужно подождать еще один день, чтобы задать другой вопрос, ток = Вольт / Отдых не работает хорошо, он может работать 4/2, но не может работать 6/15, есть идеи, почему?

2. Пожалуйста, отредактируйте свой первоначальный вопрос и опубликуйте весь свой код.

3. Боже, этого не было в моей книге, я потратил слишком много времени на его поиски, хахах. Большое вам спасибо!

Ответ №2:

Из-за вашей вложенности значение printf находится вне всех if условий, поэтому вы всегда будете видеть «Текущее значение …»

Ответ №3:

В любых итеративных или условных операторах компилятор автоматически предполагает, что строка непосредственно после оператора находится под условием или итеративным оператором.

Но если мы хотим запустить несколько строк при условии, необходимо использовать фигурные скобки, чтобы сообщить компилятору выполнить все эти строки при условии