Jasper Ian Erasmo Ответов: 2

Как исправить вычисления на reciept и как остановить программу от ошибки?


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

int main()
{
    int choice;

    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("MENU\n");
    printf("-----------------------------\n");
    printf("(1) Enter Contact Information\n");
    printf("(2) Loan Money\n");
    printf("(3) Bill\n");
    printf("(4) Exit\n");
    printf("\nPlease choose: ");
    scanf("%d", &choice);

    if(choice==1)
    {
        system("cls");
        info();
    }
    if(choice==2)
    {
        system("cls");
        loan();
    }
    if(choice==3)
    {
        system("cls");
        bill();
    }
    if(choice==4)
    {
        system("cls");
        printf("Goodbye!!!");
    }
    else
    {
        main();
    }
    return 0;
}

int info()
{
    char name[30], address[100], choice;
    int phone;


    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\n");

    printf("\nEnter Name: ");
    scanf(" %[^\n]s", &name);
    printf("\nEnter Address: ");
    scanf(" %[^\n]s", &address);
    printf("\nEnter Telephone #: ");
    scanf("%d", phone);

    FILE*fp;
    fp=fopen("Contacts.txt", "w");

    fprintf(fp, "%s", name);
    fprintf(fp, "%s", address);
    fprintf(fp, "%d", phone);

    fclose(fp);

    printf("Do you want to loan money(Y/N)? ");
    scanf("%c", &choice);

    if(choice=='Y'||choice=='y')
    {
        system("cls");
        loan();
    }
    if(choice=='N'||choice=='n')
    {
        system("cls");
        main();
    }
}

int loan()
{
    int money, type;
    char choice;

    printf("   LOANS           REGULAR RATES\n");
    printf("(1)3 to 6 months	6.000%\n");
    printf("(2)1 year	        7.500%\n");
    printf("(3)2 years	        8.000%\n");
    printf("(4)3 years	        8.500%\n");
    printf("(5)4 years	        9.000%\n");
    printf("(6)5 years	        10.000%\n");
    printf("\n");
    printf("Pick your type of loan: ");
    scanf("%d", &type);
    printf("\nHow much? ");
    scanf("%d", &money);

    FILE*fp;
    fp=fopen("Loan.txt", "w");

    fprintf(fp, "%d", type);
    fprintf(fp, "%d", money);

    fclose(fp);

    printf("Do you want to review bill(Y/N)? ");
    scanf("%c", &choice);

    if(choice=='Y'||choice=='y')
    {
        system("cls");
        bill();
    }
    if(choice=='N'||choice=='n')
    {
        system("cls");
        main();
    }
}

int bill()
{
    int phone, type;
    float money, time, interest, total;
    char name[30], address[100], choice;

    FILE*fi;
    fi=fopen("Info.txt", "r");

    fscanf(fi, "%s", &name);
    fscanf(fi, "%s", &address);
    fscanf(fi, "%d", &phone);

    fclose(fi);

    FILE*fl;
    fl=fopen("Loan.txt", "r");

    fscanf(fl, "%d", type);
    fscanf(fl, "%f", money);

    fclose(fl);

    printf("How many years passed after you payed?");
    scanf("%f", &time);

    if(type==1)
    {
        interest=money*.06*time;
    }
    if(type==2)
    {
        interest=money*.075*time;
    }
    if(type==3)
    {
        interest=money*.08*time;
    }
    if(type==4)
    {
        interest=money*.085*time;
    }
    if(type==5)
    {
        interest=money*.09*time;
    }
    if(type==6)
    {
        interest=money*.10*time;
    }

    printf("\nCustomer's Name: %s", name);
    printf("\nAddress: %s", address);
    printf("\nTelephone #: %d", phone);
    printf("\n\nMoney Loaned             P %.2f", money);
    printf("\nInterest                 P %.2f", interest);
    printf("\n                         ______");
    printf("\nTotal Amount Due         P %.2f", total);
}


Что я уже пробовал:

ну а после предложений по исследованию и чтению я придумал эту программу, ее цель состоит в том, чтобы запросить такие детали, как имя, адрес, номер человека, желающего взять кредит, и сколько ему нужно, а также налог, наложенный на сумму, зависит от времени до того, как сумма будет выплачена. у меня есть проблемы, когда я нажимаю 1, у него нет кнопки, чтобы перейти в Главное меню, а также когда я ставлю значения и когда я показываю квитанцию, она не показывает никакого значения, никаких предложений, где я ошибся и как мне исправить эти проблемы. любые предложения по самой программе и тому, как сделать ее более управляемой и простой, также приветствуются. спасибо за помощь

[no name]

Почему бы вам тогда не переместить главное меню в его собственную функцию? Вы не главный звонок от партнера программы.

Jasper Ian Erasmo

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

[no name]

Вы делаете это, перемещая код главного меню в function....so вы можете вызвать его из других ваших функций. Я знаю, что у тебя это плохо получается, и знаю почему. Вы должны начать делать это сами, а не заставлять других делать это за вас. Вот почему у вас сейчас такие неприятности. Откройте учебник и начните читать, просматривайте свои классные заметки и будьте внимательны в классе.

2 Ответов

Рейтинг:
0

Patrice T

У вас много проблем в этом коде.
В вашем коде отсутствуют прототипы функций.
Избегайте вызова функции как самостоятельной подпрограммы, если она не рекурсивна.
Изучайте циклы
изучите использование различных типов ветвящихся структур
Функции, не имеющие типа void, должны иметь возвращаемое значение.

Вот ссылки на справочники книг по С и с++ авторов этих языков. Обратите внимание, что C является предком C++, поэтому знание C всегда полезно с C++.
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]

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

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
0

OriginalGriff

Это нехорошо.
Для начала не попробовать называть основной из главных - это называется рекурсия и это совсем не подходит для этого приложения. (Ваш учитель доберется до этого позже). Вы также не должны вызывать его из других подпрограмм!
Вместо этого используйте цикл:

do
    {
    printf("MENU\n");
    printf("-----------------------------\n");
    printf("(1) Enter Contact Information\n");
    printf("(2) Loan Money\n");
    printf("(3) Bill\n");
    printf("(4) Exit\n");
    printf("\nPlease choose: ");
    scanf("%d", &choice);
    ...
    } while (choice != 4)
printf("Goodbye!!!");
Таким образом, код будет продолжать печатать меню и запрашивать ввод до тех пор, пока пользователь не решит уйти.
Затем в каждой из ваших функций не вызывайте main - просто вернитесь из функции,и она вернется в цикл.
Во-вторых, каждый выбор, который может сделать пользователь, начинается с одного и того же кода: очистить экран.
Так почему бы не назвать это после того, как пользователь сделает свой выбор, и до того, как вы начнете работать над тем, что он выбрал?
scanf("%d", &choice);
cls();
if (choice ...
Таким образом, вы не дублируете материал.

И если ваш учитель покрыл switch и все же, это было бы отличное место, чтобы использовать их!