当我以不同的顺序输入值时,程序会出错

Program gives an error when I enter values in a different order

本文关键字:程序 出错 输入 顺序      更新时间:2023-10-16

我正在尝试确定用户在程序中输入的值是有效的还是无效的

以下是其有效的条件:

  • 出口角度必须介于-10和50之间(包括10和50)
  • 关联值必须介于-3和3之间(包括-3和3)
  • 给定方程式

范围=(36-0.45(出口角))/(入口角-出口角)

范围必须介于0.75和1.25之间(包括0.75和1.25)。

用户通过输入-1-1-1 退出程序

输入如下:[入射角,出射角,入射角]。在程序中输入数字时,不使用逗号。

问题:

给定上述条件,当我输入一组值[50,-9.999,0]时,程序会说这是无效的。这个答案是正确的。如果将这些值输入到上面的等式中,则范围为0.675004,这超出了域。

如果我输入一组值[41.6,-10.01,1],程序会说它无效。这个答案是正确的,因为-10.01不在出射角的范围内。之后,当我输入[50,-9.999,0]时,程序突然认为这是有效的。此答案不正确,因为范围不在域内。

代码

#include <iostream>
#include <cmath>
#include <iomanip>
#include <cstdlib>
using namespace std;
int main (void) {
    // Declare variables
    double entry = 0.0;
    double exit = 0.0;
    double incidence = 0.0;
    double range = 0.0;
    bool validExit = false;
    bool validIncidence = false;
    bool validRange = false;
    do
    {
        // Prompt user to enter input values
        cout << "Enter flow entry angle, flow exit angle, and incidence: ";
        cin >> entry >> exit >> incidence;
    
        // Check if exit angle is valid
        if (exit >= -10.0 && exit <= 50.0) {
            validExit = true;
        }
        else {
            validExit = false;
        }
            
        // Check if incidence is valid
        if (incidence >= -3.0 && incidence <= 3.0) {
            validIncidence = true;
        }
        else {
            validIncidence = false;
        }
            
        // Determine range if difference between entry and exit value is greater than 0.0001
        if (fabs(exit - entry) > 0.0001)
        {
            range = (36 - (0.45 * exit))/(entry - exit);
        
            // Check if range is valid
            if (range >= 0.75 && range <= 1.25)
            {
                validRange = true;
            }
        }
        else {
            validRange = false;
        }
    
        // Print output
        if ((validExit != true) || (validIncidence != true) || (validRange != true)) {
            cout << "Invalid entries ignored" << endl;
        }
        else {
            cout << "Valid" << endl;
        }
    
    // Loop until user enters -1, -1, -1
    } while (entry != -1.0 && exit != -1.0 && incidence != -1.0);
    system("PAUSE"); return 0;
}

您需要在do while循环开始时将validRange重新初始化为false。否则,一旦您有一个有效范围的输入,它将保持该范围有效,直到(fabs(exit-entry)>0.0001)为假。

检查中有一条路径不会以某种方式设置validRange:即当(abs(exit - entry) > 0.0001)为true但if (range >= 0.75 && range <= 1.25)为false时。因此,validRange仍然具有上一次迭代中保留的值。