繁体   English   中英

使用C ++的编程原理和实践第4章钻取,第7步

[英]Programming Principles and Practice Using C++ Chapter 4 Drill, Step 7

我正在使用C ++进行编程原理和实践,目前仍处于第4章练习的第7步。 我在这里发现了类似的问题,但是在转换单位/值并查看更大/更小的值时,某些方法无法正常工作。 该程序运行正常,但由于某些原因,某些转换无法正确返回,例如,如果我输入2 m,然后2 ft。2 ft作为较大的值返回。

我知道代码看起来可能很难看,如果可以使转换生效,我会将其转换为函数。 提前致谢。

int main() {
double doubNum = 0;
double smallestNum = ' ';
double largestNum = 0;
string unitOfDistance = " ";
double testNum = 0;

cout << "Enter a distance with a unit of measure (ft, in, cm, m): ";

while (cin >> doubNum >> unitOfDistance) { //while tests to see if the input is a double and unit is legal

    //check the unitOfDistance and convert all values to cm and hold in testNum for comparison
    if (unitOfDistance == "in") { //in to cm
        testNum = doubNum * 2.54;
    }
    else if (unitOfDistance == "ft") { //ft to cm
        testNum = (doubNum * 12) * 2.54;
    }
    else if (unitOfDistance == "cm") { //cm
        testNum = doubNum;
    }
    else if (unitOfDistance == "m") { //m to cm
        testNum = doubNum * 100;
    }
    else {
        cout << "I don't know that unit.\n";
        return 0;
    }

    //check to see if testNum (the converted version of doubNum) is the smallest/largest/same value entered so far
    if (testNum < smallestNum) {
        smallestNum = doubNum;
        cout << smallestNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";

    }
    else if (testNum > largestNum) {
        largestNum = doubNum;
        cout << largestNum << " " << unitOfDistance << " is the largest distance entered so far.\n";

    }
    else {
        cout << smallestNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";
        cout << largestNum << " " << unitOfDistance << " is the largest distance entered so far.\n";
    }

    cout << "Enter another distance with unit: \n";
}}

尝试这个

#include <iostream>
#include <limits>
using namespace std;

int main() {
    double num, result, smallest, largest;
    smallest = numeric_limits<double>::max();
    largest = numeric_limits<double>::min();
    string unit;
    cout << "Enter a distance with a unit of measure (ft, in, cm, m): ";
    while (cin >> num >> unit) {
        if (unit == "in")       // in to cm
            result = num * 2.54;
        else if (unit == "ft")  // ft to cm
            result = (num * 12) * 2.54;
        else if (unit == "cm")  // cm
            result = num;
        else if (unit == "m")   // m to cm
            result = num * 100;
        else {
            cout << "I don't know that unit.\n";
            break;
        }
        smallest = min(smallest, result);
        largest = max(largest, result);
        cout << smallest << " cm is the smallest distance entered so far.\n";
        cout << largest << " cm is the largest distance entered so far.\n";
    }
    return 0;
}

输入项

2 m
3 ft
6 in

输出量

Enter a distance with a unit of measure (ft, in, cm, m):
200 cm is the smallest distance entered so far.
200 cm is the largest distance entered so far.
91.44 cm is the smallest distance entered so far.
200 cm is the largest distance entered so far.
15.24 cm is the smallest distance entered so far.
200 cm is the largest distance entered so far.

您的代码有几个问题:
1.应该用double smallestNum = DBL_MAX (或非常大的值)替换double smallestNum = DBL_MAX double smallestNum = ' '
2.就像您使用了largestNumsmallestNum来跟踪最大值和最小值一样,您还需要使用unitOfLargestDistanceunitOfSmallestDistance来跟踪其对应的单位。
3。

if (testNum < smallestNum) {
    smallestNum = doubNum;
    cout << smallestNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";
}

在这里,你需要更新smallestNumtestNumdoubNum 所以应该像这样:

if (testNum < smallestNum) {
    smallestNum = testNum;
    cout << doubNum << " " << unitOfDistance << " is the smallest distance entered so far.\n";
}

对于其他2个条件,情况类似。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM