首页 > 解决方案 > 了解为什么会出现不需要的 cout 语句迭代

问题描述

我正在使用一些 C++ 代码。我设置了一个 while 循环,允许我运行一些代码 x 次。一旦用户表明他们不想再次运行代码,while 循环就会终止。

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

char request;

int main() {    
    while (request != 'N')
    {
        string getCode = "";
        while (getCode.length() != 3)
        {
            cout << "Please enter your container's region code (A or B followed by two-number identification)" << endl;
            getline(cin, getCode);

            if (getCode.length() != 3)
            {
                cout << "Error" << endl;
            }
        }

        //clear the screen
        system("cls");

        //get letter

        if (getCode.at(0) == 'A' || getCode.at(0) == 'B')
        {
            if ((getCode.at(1) >= '0' && getCode.at(1) <= '9') && (getCode.at(2) >= '0' && getCode.at(2) <= '9'))
            {
                if (getCode.at(0) == 'A')
                {
                    cout << "The shipping charge is $25" << endl;
                }
                else if (getCode.at(0) == 'B')
                {
                    cout << "The shipping charge is $30" << endl;
                }
            }
            else
            {
                cout << "Error" << endl;
            }
        }
        else
        {
            cout << "Error...Please enter the code as A or B followed by two numbers" << endl;
        }

        //Again?
        cout << "Would you like to enter in another shipping identification number?" << endl;
        cin >> request;
    } 

    cout << "Thank you" << endl;
    //End Program
    system("pause");
    return 0;
}

当我表示是时(在“您想输入另一个运输标识号问题”中输入“Y”)我想再次运行代码时,程序输出不需要的“请输入您的集装箱的区域代码(A或 B 后跟两个数字标识”和“错误”语句。另外请注意,代码在“int main()”内,并且我已经正确格式化了“包含”语句。

标签: c++while-loop

解决方案


您的问题是要了解为什么会发生这种情况,所以这里是解释。你写的代码是这样说的:

    string getCode = "";
    while (getCode.length() != 3)
    {
        cout << "Please enter your container's region code...

如您所见,getCode始终初始化为空字符串。紧接着,如果它的长度不是3,就输出这个问题。

您需要了解您的计算机将始终按照您的指示执行操作。你的计算机不会做你想让它做的事情,而只会做你告诉它做的事情。以上就是你告诉你的电脑去做的事情,你的电脑每次运行这段代码时,都会乖乖地听从它严格的指令。差不多就是这样的解释,没有什么要理解的了。

这部分代码在另一个循环中,您表示不希望提示出现在循环的第二次和后续迭代中,只出现在第一次迭代中。

但是,上面对您的计算机的说明中没有任何内容指定这一点。你没有告诉你的电脑这是它应该做的,那么你为什么期望你的电脑完全靠自己来做呢?每次您的计算机执行上面显示的这些语句时,都会发生这种情况。不多也不少。无论是第一次在外while循环内,还是在随后的每次while循环迭代,都无关紧要。代码总是做同样的事情:getCode被创建并设置为一个空字符串,并且因为它的长度不是 3,内部while循环运行,打印提示并调用std::getlinestd::cin. 在你的最后while循环,如果您对计算机的指令表明它应该while从头开始再次运行循环中的代码(因为这就是while循环所做的),那么上面的指令就会被执行。

如果您现在了解您的计算机为什么这样做(因为这是您告诉它的),那么您应该很容易弄清楚要告诉您的计算机什么,这样它就不会这样做。如果您希望您的计算机仅在第一次执行while循环时打印提示,那么这正是您需要告诉您的计算机的内容:在while循环之前设置一个标志,只有在设置了标志时才打印提示(所有其他现有逻辑保持不变),然后清除此标志,因此下次while循环运行时,您的计算机将完全按照您的指示执行操作,而不是打印提示。


推荐阅读