C Программа Отображает несколько отпечатков - PullRequest
1 голос
/ 10 апреля 2020

я написал код c для расчета счета электричества c, который дает ожидаемый результат, но слишком много повторяет вывод, я пытался его отладить, но не могу понять, где я мог ошибиться просмотрите мой код, пожалуйста? я просто хочу, чтобы первый вывод был виден только не все эти результаты

#include <stdio.h>
#include <stdlib.h>

int main(){
    GetInputs();
    CalConsumCharge();
    CalExtraCharges();
    DispBill();
}

void GetInputs(){
    int unittot;
    int unit1;
    int Prev_Cons;
    printf("Enter Previous units consumption: ");
    scanf("%d",&Prev_Cons);
    printf("Enter the units consumed: ");
    scanf("%d",&unittot);
    unit1 = unittot - Prev_Cons;
    CalConsumCharge(unit1);
}

void CalConsumCharge(int unit){
    int total = 0;
    if(unit<=50){
        total = (unit*22);
    }
    else if(unit<=100){
        total = ((50*22)+(unit-50)*30);
    }
    else if(unit<=200){
        total = ((50*22)+(50*30)+(unit-100)*36);
    }
    else if(unit<=350){
        total = ((50*22)+(50*30)+(100*36)+(unit-200)*70);
    }
    else if(unit<=650){
        total = ((50*22)+(50*30)+(100*36)+(150*70)+(unit-350)*90);
    }
    else if(unit<=1000){
        total = ((50*22)+(50*30)+(100*36)+(150*70)+(300*90)+((unit-650)*135));
    }
    else{
        total = ((unit*145));
    }

    CalExtraCharges(total);
}

void CalExtraCharges(int total){
    int total1;
    total = total/100;
    if(total>=2000){
        total1 = total + 10 +20;
    }
    else{
        total1 = total +10;
    }
    DispBill(total1);
}

void DispBill(int total1){
    if(total1>=2000){
        printf("A penalty Charge was Placed Because your bill is over 2000 L.E");
        printf("Bill amount is: %d L.E",total1);
    }
    else if(total1<2000) {
        printf("your bill is : %d L.E",total1);
    }
}

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Вы должны скомпилировать свой код, а затем посмотреть, что произойдет (ошибки, предупреждения).

Во-первых, вы забыли объявить функции. Добавьте нижеприведенные объявления перед реализацией основной функции.

void GetInputs();
void CalConsumCharge(int unit);
void CalExtraCharges(int total);
void DispBill(int total1);

Во-вторых, потому что вы вызываете CalConsumCharge в GetInputs, CalExtraCharges в CalConsumCharge и т. Д. c, так что вы просто достаточно вызвать GetInputs в главной функции.

int main(){
    GetInputs();
}

Если вы хотите вызвать много функций в качестве кода в основной функции, вы должны вернуть значение в конце каждой функции, как показано ниже:

Объявление всех функций:

int GetInputs();
int CalConsumCharge(int unit);
int CalExtraCharges(int total);
void DispBill(int total1);

Корректирующий бит для каждой функции

int GetInputs() {
   ...
   unit1 = unittot - Prev_Cons;
   return unit1;
}
int CalConsumCharge(int unit) {
    ...
    else{
        total = ((unit*145));
    }
    return total;
}
int CalExtraCharges(int total) {
   ...
   else{
        total1 = total +10;
    }
    return total1;
}

Затем в основной функции:

int main () {
   int unit1 = GetInputs();
   int total = CalConsumCharge(unit1);
   int total1 = CalExtraCharges(total);
   DisBill(total1);

   return 0;
}
0 голосов
/ 10 апреля 2020

Хорошо, этот код требует много любви и внимания. Я удивлен, что вы можете скомпилировать и запустить его. Ваша основная функция должна вызывать только GetInputs (), так как она вызывает все остальные функции.

Я переработал основной и остальной код для чистоты. Я не менял логи c и все работало нормально. Взгляните:

#include <stdlib.h>
#include <stdio.h>

void DispBill(int total1)
{

    if(total1>=2000)
    {
        printf("A penalty Charge was Placed Because your bill is over 2000 L.E");
        printf("Bill amount is: %d L.E",total1);
    }
    else if(total1<2000) 
    {
        printf("your bill is : %d L.E",total1);
    }
}

void CalExtraCharges(int total)
{
    int total1;
    total = total/100;

    if(total>=2000)
    {
        total1 = total + 10 +20;
    }
    else
    {
        total1 = total +10;
    }

    DispBill(total1);
}

void CalConsumCharge(int unit)
{
    int total = 0;

    if(unit<=50)
    {
        total = (unit*22);
    }
    else if(unit<=100)
    {
        total = ((50*22)+(unit-50)*30);
    }
    else if(unit<=200)
    {
        total = ((50*22)+(50*30)+(unit-100)*36);
    }
    else if(unit<=350)
    {
        total = ((50*22)+(50*30)+(100*36)+(unit-200)*70);
    }
    else if(unit<=650)
    {
        total = ((50*22)+(50*30)+(100*36)+(150*70)+(unit-350)*90);
    }
    else if(unit<=1000)
    {
        total = ((50*22)+(50*30)+(100*36)+(150*70)+(300*90)+((unit-650)*135));
    }
    else
    {
    total = ((unit*145));
    }

    CalExtraCharges(total);
}

void GetInputs(void)
{
    int unitTotal;
    int unitOne;
    int Prev_Cons;

    printf("Enter Previous units consumption: ");
    scanf("%d",&Prev_Cons);

    printf("Enter the units consumed: ");
    scanf("%d",&unitTotal);

    unitOne = unitTotal - Prev_Cons;

    CalConsumCharge(unitOne);
}

int main()
{
    GetInputs();
}

Вот мой вывод:

Here is the output!

...