C++ C++;“内部变量丢失赋值”;如果;环

C++ C++;“内部变量丢失赋值”;如果;环,c++,if-statement,nested,switch-statement,variable-assignment,C++,If Statement,Nested,Switch Statement,Variable Assignment,我相信这是一个非常简单的问题,但我才刚刚开始 在程序中,有简单的输入验证。如果输入正确,则没有问题 问题是,当用错误测试程序时,比如输入零或负数,所有变量在输出中都是空的(即字符串变为空,数字变为零) 提前感谢您的帮助和见解 // This menu driven program determines the time sound will take to travel through // gas, liquid, and solid, given a distance from a user

我相信这是一个非常简单的问题,但我才刚刚开始

在程序中,有简单的输入验证。如果输入正确,则没有问题

问题是,当用错误测试程序时,比如输入零或负数,所有变量在输出中都是空的(即字符串变为空,数字变为零)

提前感谢您的帮助和见解

// This menu driven program determines the time sound will take to travel through
// gas, liquid, and solid, given a distance from a user.

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main()
{
// constants
const double    AIR_SPEED_RATE_PER_SECOND_SOUND = 1100.0,       //in feet per second
                WATER_SPEED_RATE_PER_SECOND_SOUND = 4900.0,     // in feet per second
                STEEL_SPEED_RATE_PER_SECOND_SOUND = 16400.0;    // in feet per second

// Program defined variables
double          Time_To_Travel = 0.0;       // in seconds

string          Medium;

// User defined variables
double          distance_of_travel; //in feet

int             menu_selection;

//Display a menu for mediums of sound conduction.
cout << "Sound travels at different speeds through air, water, and steel." << endl;
cout << "\nThis program will calculate the time it takes, in feet per second, for " \
"sound to travel a given distance." << endl;
cout << "Please select a number choice below:\n\n1. Air\n2. Water\n3. Steel " << endl;

//Get input from user.
cout << "\nEnter Selection: ";
cin >> menu_selection;

cout << "\nEnter distance in feet the sound will travel: ";
cin >> distance_of_travel;


// Input validate selection is on the menu
if (menu_selection >= 1 && menu_selection <= 3)
    {
    if (distance_of_travel > 0.0)  // input validation distance is positive
        {
        switch (menu_selection)  // calculate the time of travel based on user input
            {
            case 1: Medium = "air";
                    Time_To_Travel = distance_of_travel / AIR_SPEED_RATE_PER_SECOND_SOUND;
                break;

            case 2: Medium = "water";
                    Time_To_Travel = distance_of_travel / WATER_SPEED_RATE_PER_SECOND_SOUND;
                break;

            case 3: Medium = "steel";
                    Time_To_Travel = distance_of_travel / STEEL_SPEED_RATE_PER_SECOND_SOUND;
                break;
            }
        }
    else
        {
        cout << "\nPlease enter a distance greater than zero: ";
        cin >> distance_of_travel;
        }
    }

else
    {
    cout << "\nMenu selection is not 1, 2, or 3.\n\nPlease correctly enter a number 1 through 3: ";
    cin >> menu_selection;
    }
// Format to four decimal places and display the time sound takes to travel given distance.
cout << fixed << showpoint << setprecision(4);
cout << "Sound would take " << Time_To_Travel << " seconds to travel given distance of " << distance_of_travel << " feet in " << Medium << "." << endl;;

return 0;
//此菜单驱动程序确定声音传播所需的时间
//气体、液体和固体,与用户保持一定距离。
#包括
#包括
#包括
使用名称空间std;
int main()
{
//常数
常数双空气速度速率每秒声音=1100.0,//以英尺每秒为单位
水流速度速度每秒声音=4900.0,//以英尺每秒为单位
钢制速度速率每秒声音=16400.0;//以英尺每秒为单位
//程序定义变量
双时间到行程=0.0;//以秒为单位
弦介质;
//用户定义变量
双行程距离;//以英尺为单位
int菜单选择;
//显示声音传导介质的菜单。

cout一个
if
语句是一个简单的分支,而不是一个循环。在
if
语句的末尾,执行会继续到块的末尾

if (menu_selection >= 1 && menu_selection <= 3)
从未对新输入进行操作,并且打印未触及的值。将初始的
if
替换为
do{…}while(condition);
循环,该循环包装用户输入。一旦输入符合要求,就可以进入程序核心

bool is_good;
do
{
    is_good = false;
    cout << "\nEnter Selection: ";
    cin >> menu_selection;
    cout << "\nEnter distance in feet the sound will travel: ";
    cin >> distance_of_travel;
    if (menu_selection < 1 || menu_selection > 3 || distance_of_travel < 0)
        cout << "error message here";
    else
        is_good = true;
} while (!is_good);
bool很好;
做
{
好=假;
cout>菜单选择;
cout>行程的距离;
如果(菜单选择<1 | |菜单选择>3 | |行程距离<0)

cout一个
if
语句是一个简单的分支,而不是一个循环。在
if
语句的末尾,执行会继续到块的末尾

if (menu_selection >= 1 && menu_selection <= 3)
从未对新输入进行操作,并且打印未触及的值。将初始的
if
替换为
do{…}while(condition);
循环,该循环包装用户输入。一旦输入符合要求,就可以进入程序核心

bool is_good;
do
{
    is_good = false;
    cout << "\nEnter Selection: ";
    cin >> menu_selection;
    cout << "\nEnter distance in feet the sound will travel: ";
    cin >> distance_of_travel;
    if (menu_selection < 1 || menu_selection > 3 || distance_of_travel < 0)
        cout << "error message here";
    else
        is_good = true;
} while (!is_good);
bool很好;
做
{
好=假;
cout>菜单选择;
cout>行程的距离;
如果(菜单选择<1 | |菜单选择>3 | |行程距离<0)

cout一个
if
语句是一个简单的分支,而不是一个循环。在
if
语句的末尾,执行会继续到块的末尾

if (menu_selection >= 1 && menu_selection <= 3)
从未对新输入进行操作,并且打印未触及的值。将初始的
if
替换为
do{…}while(condition);
循环,该循环包装用户输入。一旦输入符合要求,就可以进入程序核心

bool is_good;
do
{
    is_good = false;
    cout << "\nEnter Selection: ";
    cin >> menu_selection;
    cout << "\nEnter distance in feet the sound will travel: ";
    cin >> distance_of_travel;
    if (menu_selection < 1 || menu_selection > 3 || distance_of_travel < 0)
        cout << "error message here";
    else
        is_good = true;
} while (!is_good);
bool很好;
做
{
好=假;
cout>菜单选择;
cout>行程的距离;
如果(菜单选择<1 | |菜单选择>3 | |行程距离<0)

cout一个
if
语句是一个简单的分支,而不是一个循环。在
if
语句的末尾,执行会继续到块的末尾

if (menu_selection >= 1 && menu_selection <= 3)
从未对新输入进行操作,并且打印未触及的值。将初始的
if
替换为
do{…}while(condition);
循环,该循环包装用户输入。一旦输入符合要求,就可以进入程序核心

bool is_good;
do
{
    is_good = false;
    cout << "\nEnter Selection: ";
    cin >> menu_selection;
    cout << "\nEnter distance in feet the sound will travel: ";
    cin >> distance_of_travel;
    if (menu_selection < 1 || menu_selection > 3 || distance_of_travel < 0)
        cout << "error message here";
    else
        is_good = true;
} while (!is_good);
bool很好;
做
{
好=假;
cout>菜单选择;
cout>行程的距离;
如果(菜单选择<1 | |菜单选择>3 | |行程距离<0)

cout通过在switch语句中添加
default
块,您可以处理零、负数或所有未在
case
块中定义的可能输入。然后,您的代码将如下所示

switch (menu_selection)  // calculate the time of travel based on user input
        {
        case 1: Medium = "air";
                Time_To_Travel = distance_of_travel / AIR_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 2: Medium = "water";
                Time_To_Travel = distance_of_travel / WATER_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 3: Medium = "steel";
                Time_To_Travel = distance_of_travel / STEEL_SPEED_RATE_PER_SECOND_SOUND;
            break;
        default:
            // handle zero, negative numbers and so on.
            break;
        }

参考:

您可以通过在switch语句中添加
default
块来处理零、负数或所有未在
大小写
块中定义的可能输入。然后,您的代码将如下所示

switch (menu_selection)  // calculate the time of travel based on user input
        {
        case 1: Medium = "air";
                Time_To_Travel = distance_of_travel / AIR_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 2: Medium = "water";
                Time_To_Travel = distance_of_travel / WATER_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 3: Medium = "steel";
                Time_To_Travel = distance_of_travel / STEEL_SPEED_RATE_PER_SECOND_SOUND;
            break;
        default:
            // handle zero, negative numbers and so on.
            break;
        }

参考:

您可以通过在switch语句中添加
default
块来处理零、负数或所有未在
大小写
块中定义的可能输入。然后,您的代码将如下所示

switch (menu_selection)  // calculate the time of travel based on user input
        {
        case 1: Medium = "air";
                Time_To_Travel = distance_of_travel / AIR_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 2: Medium = "water";
                Time_To_Travel = distance_of_travel / WATER_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 3: Medium = "steel";
                Time_To_Travel = distance_of_travel / STEEL_SPEED_RATE_PER_SECOND_SOUND;
            break;
        default:
            // handle zero, negative numbers and so on.
            break;
        }

参考:

您可以通过在switch语句中添加
default
块来处理零、负数或所有未在
大小写
块中定义的可能输入。然后,您的代码将如下所示

switch (menu_selection)  // calculate the time of travel based on user input
        {
        case 1: Medium = "air";
                Time_To_Travel = distance_of_travel / AIR_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 2: Medium = "water";
                Time_To_Travel = distance_of_travel / WATER_SPEED_RATE_PER_SECOND_SOUND;
            break;

        case 3: Medium = "steel";
                Time_To_Travel = distance_of_travel / STEEL_SPEED_RATE_PER_SECOND_SOUND;
            break;
        default:
            // handle zero, negative numbers and so on.
            break;
        }


参考资料:

您是否尝试过在调试器中单步执行此代码?没有
if循环
之类的东西。如果您想要循环,请使用
while
for
。谢谢@Barmar,我会的remember@MrEricSir我不太确定如何在Xcode中运行调试器。您是否尝试过在调试器中单步执行此代码?没有成功的例子h作为一个
if循环
。如果你想要一个循环,使用
while
for
。谢谢@Barmar,我会的remember@MrEricSir我不太确定如何在Xcode中运行调试器。您是否尝试过在调试器中单步执行此代码?没有所谓的
if循环
。如果需要循环,请使用
while
谢谢@Barmar,我会的remember@MrEricSir我不太确定如何在Xcode中运行调试器。您是否尝试过在调试器中单步执行此代码?没有
if循环
。如果您想要循环,请使用
while
for
。谢谢@Barmar,我会的remember@MrEricSir我不太清楚如何管理debugger在Xcode中。@NonCreature0714我编辑它以在输入错误时显示。我通过投票表决您的优秀答案来回报我的赞赏和感谢。@NonCreature0714很高兴我能提供帮助!还记得刷新输入buf