【问题标题】:C++ Printing a decimal given a numerator and denominator给定分子和分母的 C++ 打印小数
【发布时间】:2018-03-23 23:21:56
【问题描述】:

当我运行这个时,我得到一个疯狂的小数。 然后,我将使用完全相同的分子和分母再次运行它,它给了我一些不同的东西。我不知道十进制值在哪里得到它正在使用的数字和分母。我希望它使用用户在程序开始时强制输入的那个。

我不知道我做错了什么。非常感谢任何帮助!

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

void printLogo() {
    cout << "logo here" << endl;
}    

int AskFraction(int &numerator, int &denominator) {
    cout << "Enter numerator: ";
    cin >> numerator;
    cout << "Enter denominator: ";
    cin >> denominator;

    while (denominator == 0 || denominator < 0) {
        cout << "Denominator must be a number above zero." << endl;
        cout << "Enter denominator: ";
        cin >> denominator;
    }

    return numerator, denominator;
 }

float DecimalValue(float &decimalValue, int numerator, int denominator) {
if (denominator != 0 && denominator > 0) {
    decimalValue = numerator / denominator;
}

return decimalValue;
}

void PrintFraction(int numerator, int denominator) {
cout << numerator << "/" << denominator << endl;
}

int main(int numerator, int denominator, float decimalValue) {

printLogo();

AskFraction(numerator, denominator);

DecimalValue(decimalValue, numerator, denominator);
cout << "The decimal value is: " << decimalValue << endl;

PrintFraction(numerator, denominator);

system("pause");
return 0;
}

【问题讨论】:

  • 1.请阅读按值传递和按引用传递的概念。 2. Cmd 行 args 应用作输入,但不能用作在程序中输入的变量。 3.return numerator, denominator;希望编译器应该已经产生了警告。
  • 除了@Mahesh 所说的,您没有将DecimalValue 函数调用的返回值分配给任何东西。
  • 而且main函数的签名不正确。
  • @Mahesh 好的,我通过引用进行了传递,并更改了我的分子、分母和十进制值。我在我的问题中编辑了它。但我仍然没有得到正确的小数点 - 它每次都给出 0。
  • numeratordenominator 都是 int,因此,在 C++ 中,即使 decimalValuefloat,您也正在执行 integer 除法(例如 2/3 -> 0)。你还没有修复return numerator, denominator;,你希望发生什么?

标签: c++ function decimal fractions


【解决方案1】:

您的代码包含多种概念。首先,您通过引用传递变量,然后尝试返回值。使用通过引用传递或返回结果的值。

float DecimalValue(float &decimalValue, int numerator, int denominator) {
if (denominator != 0 && denominator > 0) {
    decimalValue = numerator / denominator;
}

return decimalValue;
}

这应该是:

void DecimalValue(float &decimalValue, int numerator, int denominator) {
if (denominator != 0 && denominator > 0) {
    decimalValue = numerator / denominator;
}    
}

或者

float DecimalValue(int numerator, int denominator) {
float decimalValue; //You should initialize this to a value. Decide this based on what you want to happen when the condition of the next if is false.
if (denominator != 0 && denominator > 0) {
    decimalValue = numerator / denominator;
}

return decimalValue;
}

另外,您尝试返回两个值。如果您需要返回多个结果,则需要使用按引用传递。喜欢在:

int AskFraction(int &numerator, int &denominator) {
    cout << "Enter numerator: ";
    cin >> numerator;
    cout << "Enter denominator: ";
    cin >> denominator;

    while (denominator == 0 || denominator < 0) {
        cout << "Denominator must be a number above zero." << endl;
        cout << "Enter denominator: ";
        cin >> denominator;
    }

    return numerator, denominator;
 }

这应该是:

void AskFraction(int &numerator, int &denominator) {
    cout << "Enter numerator: ";
    cin >> numerator;
    cout << "Enter denominator: ";
    cin >> denominator;

    while (denominator == 0 || denominator < 0) {
        cout << "Denominator must be a number above zero." << endl;
        cout << "Enter denominator: ";
        cin >> denominator;
    }    
 }

更改我上面指出的内容并更正主要参数后的最终代码是:

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

void printLogo() {
    cout << "logo here" << endl;
}    

void AskFraction(int &numerator, int &denominator) {
    cout << "Enter numerator: ";
    cin >> numerator;
    cout << "Enter denominator: ";
    cin >> denominator;

    while (denominator == 0 || denominator < 0) {
        cout << "Denominator must be a number above zero." << endl;
        cout << "Enter denominator: ";
        cin >> denominator;
    }    
 }

void DecimalValue(float &decimalValue, int numerator, int denominator) {
if (denominator != 0 && denominator > 0) {
    decimalValue = (float)numerator / denominator;
}

}

void PrintFraction(int numerator, int denominator) {
cout << numerator << "/" << denominator << endl;
}

int main() {
int numerator, int denominator, float decimalValue
printLogo();

AskFraction(numerator, denominator);

DecimalValue(decimalValue, numerator, denominator);
cout << "The decimal value is: " << decimalValue << endl;

PrintFraction(numerator, denominator);

system("pause");
return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2014-05-19
    • 2020-04-29
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多