Я продолжаю получать неинициализированную переменную, используемую для процентов, количества платежей и суммы займа

#c #initialization #declaration #undefined-behavior

Вопрос:

Сара Коннорс-это имя и фамилия, 10000-это сумма кредита, 12 процентов, а 3-это количество лет для кредита, все это находится в «Lab4Data.txt»

 #include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    string fName, lName;
    
    double interestRate, loanAmount, monthlyPayment, totalPayed, interestAmount,

    double numberOfPayments

    ifstream input;

    ofstream output;
    
    input.open("Lab4Data.txt");
    output.open("Kirklandlab4results.txt");
    interestRate = interestRate / 12;
    interestRate = interestRate / 100;
    numberOfPayments = numberOfPayments * 12;
    
    monthlyPayment = loanAmount * interestRate
            * pow(loanAmount   interestRate, numberOfPayments)
            / pow(loanAmount   interestRate, numberOfPayments) - 1; //equation to get monthly payment
    totalPayed = monthlyPayment * numberOfPayments;
    interestAmount = interestRate * numberOfPayments;
    
    input >> fName >> lName;
    output << "Name:" << fName << " " << lName;
    
    input >> loanAmount;
    output << "Loan Amount:" << loanAmount << endl;
    
    input >> interestRate;
    output << "Monthly Intrest Rate:" << interestRate << endl;
    
    input >> numberOfPayments;
    output << "Number Of Payments:" << numberOfPayments << endl;
    
    output << "Monthly Payment:" << monthlyPayment << endl;
    output << "Total Amount Payed:" << totalPayed << endl;
    output << "Interest Amount:" << interestAmount << endl;
    
    output.close();
    
    return 0;
}
 

я пытаюсь понять, почему он говорит мне, что я получаю неинициализированную переменную, используемую для процентов, количества платежей и суммы займа. Я новичок в C и нуждаюсь в помощи.

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

1. Вы выполняете это: interestRate = interestRate / 12; перед тем, как прочитать значение interestRate . Обратите внимание, что в c это присвоение значений, а не формулы, которые выполняются каждый раз, когда вы смотрите на переменную.

2. C -это не электронная таблица. Вычисления не обновляются после изменения переменной, участвующей в вычислении. Если переменная изменяется и вам нужен новый результат, вам придется выполнить вычисление снова. Если вы запустите вычисление ДО того, как переменная получит значение, вы получите неинициализированную переменную.

Ответ №1:

В этих заявлениях

 interestRate = interestRate/12;
interestRate = interestRate / 100;
numberOfPayments = numberOfPayments * 12;
monthlyPayment = loanAmount * interestRate;
 

используются неинициализированные переменные

 double interestRate, loanAmount, monthlyPayment, totalPayed, interestAmount, 
    
double numberOfPayments;
 

это вызывает неопределенное поведение.

Например, каково значение переменной interestRate в этом выражении interestRate/12 ? Поскольку переменная не была инициализирована (ни одно значение не было присвоено ей в ее объявлении), она содержит некоторый мусор.

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

1. Я понятия не имею, какие неинициализированные переменные вызывают неопределенное поведение, если бы вы могли объяснить мне более подробно, если это возможно, поскольку я новичок в c .

2. @kirqy Видишь вопрос в моем ответе.

3. процентная ставка составляет 12, которая записана в текстовом файле «Lab4Data.txt» там написано Сара Коннорс 10000 12 3 //Сара Коннорс-это fName,Lname 10000-это количество кредитов, 12-процент и 3-это количество платежей// Количество платежей, которое, как я полагаю, определено, но я немного сомневаюсь в использовании этой переменной, как я это сделал.

4. @kirqy Программа считывает данные из файла ПОСЛЕ того, как она вычисляет interestRate = interestRate/12; Во время вычисления, interestRate не имеет известного значения. Каково значение y in y = x 1 , если вы не знаете значения x?

5. @kirqy Вы должны присвоить значение переменной перед ее использованием. Что непонятно?