程序的一部分在首次运行后未执行

A part of the program doesn't execute after the first time run

本文关键字:运行 执行 一部分 程序      更新时间:2023-10-16

我在查阅一本关于c++的新书时做了其中的一个练习。程序得到一个长度,后面跟着它的单位。程序将该值转换为厘米,然后将该值与之前的输入进行比较,并给出一个输出,说明到目前为止输入的最大和最小的值。问题是,似乎有一个问题,当使用"脚"单位。下面是我的main.cpp:

#include "std_lib_facilities.h"
int main()
{
    double value{0};
    double largest{0};
    double smallest{0};
    string unit;
    constexpr double cm_per_in {2.54};
    constexpr double cm_per_m {100};
    constexpr double cm_per_ft {cm_per_in*12};
    int sum;
    while(cin >> value >> unit)
    {
        if(unit=="cm")
        {
            if(largest==0 && smallest == 0){
                smallest = value;
                largest = value;
                cout << value << "cm is the only value entered till now.n";
            }   
            else if(value<smallest)
            {
                smallest = value;
                cout << "nnThe smallest so far is "<<smallest<<"cm.n";
                cout << "nThe largest so far is "<<largest<<"cm.n";
            }
            else if(value>largest){
                largest = value;
                cout  << "The smallest so far is "<<smallest<<"cm.n";
                cout << "nThe largest so far is "<<largest<<"cm.n";
            }
            sum += value;
        }
        else if(unit=="m")
        {
            if(largest==0 && smallest == 0){
                smallest = value*cm_per_m;
                largest = value*cm_per_m;
                cout << value*cm_per_m << "cm is the only value entered till now.n";
            }   
            else if(value*cm_per_m<smallest)
            {
                smallest = value*cm_per_m;
                cout << "The smallest so far is "<<smallest<<"cm.n";
                cout << "nThe largest so far is "<<largest<<"cm.n";
            }
            else if(value*cm_per_m>largest){
                largest = value*cm_per_m;
                cout << "nThe smalles so far is "<<smallest<<"cm.n";
                cout  << "The largest so far is "<<largest<<"cm.n";
            }
            sum += value*cm_per_m;
        }
        else if(unit=="ft")
        {
            if(largest==0 && smallest == 0){
                smallest = value*cm_per_ft;
                largest = value*cm_per_ft;
                cout << value*cm_per_ft << "cm is the only value entered till now.n";
            }   
            else if(value*cm_per_ft<smallest)
            {
                smallest = value*cm_per_ft;
                cout << "The smallest so far is "<<smallest<<"cm.n";
                cout << "nThe largest so far is "<<largest<<"cm.n";
            }
            else if(value*cm_per_ft>largest){
                largest = value*cm_per_ft;
                cout << "nThe smallest so far is "<<smallest<<"cm.n";
                cout  << "The largest so far is "<<largest<<"cm.n";
            }
            sum += value * cm_per_ft;
        }
        else if(unit=="in")
        {
            if(largest==0 && smallest == 0){
                smallest = value*cm_per_in;
                largest = value*cm_per_in;
                cout << value*cm_per_in << "cm is the only value entered till now.n";
            }   
            else if(value*cm_per_in<smallest)
            {
                smallest = value*cm_per_in;
                cout << "The smallest so far is "<<smallest<<"cm.n";
                cout << "The largest so far is "<<largest<<"cm.n";
            }
            else if(value*cm_per_in>largest){
                largest = value*cm_per_in;
                cout << "The smallest so far is "<<smallest<<"cm.n";
                cout  << "The largest so far is "<<largest<<"cm.n";
            }
            sum += value * cm_per_in;
        }
    }
    return 0;
}

下面是程序的输入/输出:D: c++ 测试分测验>程序24厘米24cm是目前唯一输入的值。

24 in
The smallest so far is 24cm.
The largest so far is 60.96cm.
24 m
The smallest so far is 24cm.
The largest so far is 2400cm.
24 ft

在上面的输出中可以看到,当使用"feet"单位时没有输出。另一个测试的输出:

D:C++testingsubtesting>program
24 ft
731.52cm is the only value entered till now.
24 ft
The smallest so far is 731.52cm.
The largest so far is 731.52cm.
200 ft
The smallest so far is 731.52cm.
The largest so far is 6096cm.
30 ft

在'feet'代码中似乎有某种错误。代码有时有效,有时无效。有人能帮帮我吗?

代码没有问题。你的期望有问题。

只有当其中一个改变时才显示最大和最小,这是一个明确的设计意图,而不是错误。

在输入24in和24m之后,第三个值24ft既不是最大的也不是最小的,因此正确地没有输出